IPアドレスから国名を取得する関数(Excel VBA)

土曜日 , 12, 12月 2020 Leave a comment

xxx.xxx.xxx.xxx形式のIPアドレスから国名を調べる作業をしているとき面倒になって作った関数です。
Excelシート内でユーザ定義関数として使用、またはVBA内で使用することができます。

https://software77.net/geo-ip/ より取得したデータをVLOOKUP関数で拾っているだけですが、データベース上に記載されていない127.0.0.1など予約済みアドレスを関数内でチェックして、該当する場合、適当なネットワーク名を返すようにしています。

手元のマシンでは100万件のデータを2分強で処理できました。

前準備

  1. https://software77.net/geo-ip/ より”IP to Country Database”を取得し適当な場所に展開する。
  2. 適当なExcelブックを作成し『IpToCountry』シートを作成する。
  3. 取得したCSV形式のファイルより先頭部分のコメント行を取り除いたデータ部分(Ver. 5.9.7の場合、341行目以降のデータ)を『IpToCountry』シート2行目以降に貼り付ける。

image

使い方

  • Excelシート中でユーザ定義関数として使う

Excelシート中で=IP2COUNTRY(A2)のように関数として記述するとセルの内容で国名を取得できます。第2引数により国名の略称やレジストリを取得することできます。

  • Excel VBA中で使う

' 
Option Explicit

Public Sub SetCountryNames()

    Dim xlSrcWorksheet As Excel.Worksheet
    Set xlSrcWorksheet = ThisWorkbook.Worksheets("サンプル")
    
    Dim rowIndex As Long
    Dim ip As String
    Dim countryName As String

    rowIndex = 2
    ip = xlSrcWorksheet.Cells(rowIndex, 5).Value
    
    Do While ip <> ""
    
        countryName = IP2COUNTRY(ip)
        xlSrcWorksheet.Cells(rowIndex, 6).Value = countryName
        
        rowIndex = rowIndex + 1
        If rowIndex >= 1048577 Then
            Exit Do
        End If
        If rowIndex Mod 100 = 0 Then
            Debug.Print rowIndex
            DoEvents
        End If
        
        ip = xlSrcWorksheet.Cells(rowIndex, 5).Value
        
    Loop
    
End Sub

Please give us your valuable comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください