みなさん,こんにちは。
シンノユウキ(shinno1993)です。
今回は,VBAを使用してIPアドレスを取得するコードを紹介します。
一言でIPアドレスといっても,その用途によってグローバルIPアドレスとプライベートIPアドレスとに分類されます。この2つでは,それぞれ取得の方法が異なります。
下記で,グローバルIPアドレスとプライベートIPアドレスとに分けて,取得の方法について紹介していきます。
なお本記事で利用したコードは下記のサイトを参考にしたものです。ご興味ある方は下記のサイトも覗いてみてください:
VBAでグローバルIPアドレスを取得する
VBAではインターネット接続なしにグローバルIPアドレスを取得することはできません。グローバルIPアドレスを取得するためには,インターネットに接続する必要があります。
これには,グローバルIPアドレスを取得できるWebサイト:https://myip.dnsomatic.com
を利用します。このサイトにリクエストを送り,帰ってきたテキストをグローバルIPアドレスとします:
Function getPublicIPAdress() As String
'参照設定が必要なライブラリ:Microsoft XML, v6.0
Dim httpReq As XMLHTTP60: Set httpReq = New XMLHTTP60
httpReq.Open "Get", "https://myip.dnsomatic.com", False
httpReq.send
Do While httpReq.readyState < 4
DoEvents
Loop
getPublicIPAdress = httpReq.ResponseText
Set httpReq = Nothing
End Function
VBAでローカルIPアドレスを取得する
VBAでローカルIPアドレスを取得するために,WMI(Windows Management Instrumentation)を使用します。WMIを使用することで,システムに関する情報を比較的簡単に取得できます。
下記のコードでは,ネットワークアダプタに関する情報を取得できるWin32_NetworkAdapterConfigurationを使用し,ネットワークアダプタにバインドされた有効なIPアドレスを取得しています:
Function getLocalIPAdress() As String
'参照設定が必要なライブラリ:Microsoft WMI Scripting V1.2 Library
Dim objWMI As Object: Set objWMI = CreateObject("WbemScripting.SWbemLocator")
Dim objWMIService As Object: Set objWMIService = objWMI.ConnectServer
Dim items As Object
Set items = objWMIService.ExecQuery("SELECT IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
Dim item As Object, IPAddress As String
For Each item In items
If Not IsNull(item.IPAddress) Then IPAddress = item.IPAddress(0)
Exit For
Next item
Set objWMI = Nothing
Set objWMIService = Nothing
getLocalIPAdress = IPAddress
End Function
まとめ
今回はVBAでグローバルIPアドレスとローカルIPアドレスを取得する方法について紹介しました。
日常的にIPアドレスを利用することはないかもしれませんが,いざという時のためになんとなくのやり方だけでも知っておきたいですね。