ネットワークの基礎から実務まで、順番に学べるメニューです。
MACアドレス一覧を取得する
ARP情報を取得して、IPアドレスとMACアドレスの対応をExcelで見える化しましょう
MACアドレスは、ネットワーク機器ごとに割り当てられている世界に一つの固有番号です。
今回は Windows の arp コマンドをVBAから実行し、パソコンが記憶している「IPとMACの対応表(ARPテーブル)」を取得します。
このVBAでできること
ARPテーブルの抽出
Windowsが通信相手を識別するために保持している一時的な名簿(ARPテーブル)を読み取ります。
機器の特定
IPアドレスだけでは分からない「どのメーカーのどの端末か」を調査する手がかりになります。
Excelへの自動整理
コマンドプロンプトの文字結果を、自動的にExcelのセルへ分割して入力します。
flowchart LR
PC["自分のPC"]
subgraph InsidePC ["PC内の記憶領域"]
ARP["ARPテーブル
(IPとMACの対応表)"]
end
Device1["ルーター
192.168.1.1
AA-BB-CC..."]
Device2["プリンター
192.168.1.20
11-22-33..."]
PC -- 通信すると記憶される --> Device1
PC -- 通信すると記憶される --> Device2
ARP -.-> |VBAで読み取り| PC
VBAコード
Sub GetMacAddressList()
Dim ws As Worksheet
Dim objShell As Object
Dim objExec As Object
Dim strResult As String
Dim arrLines As Variant
Dim arrParts As Variant
Dim i As Long
Dim rowNum As Long
Dim lineText As String
Set ws = ActiveSheet
' 画面をクリアして見出しを作成
ws.Cells.Clear
ws.Range("A1:C1").Value = Array("IPアドレス", "MACアドレス", "種類")
ws.Range("A1:C1").Font.Bold = True
' Windowsコマンドの実行準備
Set objShell = CreateObject("WScript.Shell")
' arp -a コマンドを実行(現在のARPテーブルを表示)
Set objExec = objShell.Exec("cmd /c arp -a")
' 結果をすべて読み込む
strResult = objExec.StdOut.ReadAll
' 改行ごとに分割して1行ずつ処理
arrLines = Split(strResult, vbCrLf)
rowNum = 2
For i = LBound(arrLines) To UBound(arrLines)
lineText = Trim(arrLines(i))
' IPアドレスとMACアドレスが含まれる行か判定 (簡易パターンマッチ)
If lineText Like "*.*.*.* *-*-*-*-*-* *" Then
' 連続する空白を1つに整理して分割
arrParts = SplitBySpace(lineText)
If UBound(arrParts) >= 2 Then
ws.Cells(rowNum, 1).Value = arrParts(0) ' IPアドレス
ws.Cells(rowNum, 2).Value = arrParts(1) ' MACアドレス
ws.Cells(rowNum, 3).Value = arrParts(2) ' 種類(dynamic/static)
rowNum = rowNum + 1
End If
End If
Next i
ws.Columns("A:C").AutoFit
MsgBox "MACアドレス一覧を取得しました。", vbInformation
End Sub
' 連続する空白を整理して分割する補助関数
Function SplitBySpace(ByVal txt As String) As Variant
Dim tmp As String
tmp = Trim(txt)
Do While InStr(tmp, " ") > 0
tmp = Replace(tmp, " ", " ")
Loop
SplitBySpace = Split(tmp, " ")
End Function
コード解説
① arp -a を実行
WScript.Shell を通じて Windows の標準コマンドを実行し、結果をテキストとして取り込みます。
② 空白の整理(SplitBySpace)
arp コマンドの結果は項目間の空白数がバラバラなため、そのままでは分割できません。自作関数で空白を1つにまとめてから分割しています。
③ データの抽出と出力
「IPアドレス形式」と「MACアドレス形式」が並んでいる行だけを特定し、Excelの各列へ順番に書き込みます。
実務ポイント
Pingとの組み合わせが最強
事前にネットワーク内の全IPにPingを打っておくと、ARPテーブルが最新になり、網羅的なリストが作れます。
不明な通信機器の特定
MACアドレスの先頭3オクテット(6桁)を調べれば、その機器のメーカーが判明し、調査が捗ります。
定期的な実行がおすすめ
ARP情報は数分〜数十分で消えてしまうため、調査を行う直前に実行するのがポイントです。
よくあるトラブル
- 期待した機器がリストに出ない
- その機器と最近通信していない場合、PCの記憶から消えています。一度そのIPにPingを打ってから再実行してください。
- 169.254.x.x などの不明なIPが出る
- IPアドレスが正常に取得できていない(リンクローカルアドレス)機器の可能性があります。
まとめ
- VBAから
arp -aを実行すれば、ネットワーク内の物理的な名簿が作れます - 連続空白の処理(整形)を行うことで、Excelへの出力が容易になります
- Pingツールと組み合わせることで、精度の高いネットワーク棚卸しが可能になります
ネットワーク設計・トラブル対応でお困りではありませんか?
株式会社リアライズがサポートいたします。
- ネットワーク設計・構築
- トラブル調査・改善
- 業務効率化・自動化