VBAでIPアドレス(グローバル・ローカル)を取得する

みなさん,こんにちは。
シンノユウキ(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アドレスを利用することはないかもしれませんが,いざという時のためになんとなくのやり方だけでも知っておきたいですね。

タイトルとURLをコピーしました