如何在Excel中根据IP地址查找位置

时间:2014-06-10 21:21:06

标签: excel location ip-address vlookup ipv4

我已经获得了大约5000个与IP相关的用户事件的电子表格,我尝试使用IP仅使用Excel公式来确定位置。我日志中的IP结构为"dotted quads"(十进制表示法)。

我认为VLOOKUP是这里的方式,所以我下载了WEBNet77's IPV4 IpToCountry database,这似乎是一个全面的,最新的资源(为此目的有更好的资源吗?)。该数据库包括大约140K行的IP范围,其中的表格结构如下:

IP address lookup

Colp标签A - G分别为:IP FROM,IP TO,REGISTRY,ASSIGNED,CTRY,CNTRY,COUNTRY。

注意,一个问题:列A到B表示一系列IP,但它们采用的是#长;格式" (起初我没有意识到这一点)。因此,在使用这些值作为参考之前,我必须转换我的虚线四边形。然后,我想为我日志中的每个IP返回国家/地区(G列)。

这里有什么帮助吗?

如果您认为有更好的查找IP的方式> Excel中的国家/地区(可能使用网络即{。{1}}),请告诉我。

2 个答案:

答案 0 :(得分:5)

您可以使用此功能将四元IP转换为数字

Function GetNumericIP(quadIP As String) As Long

    Dim sections
    On Error Resume Next
    sections = Split(quadIP, ".")

    GetNumericIP = sections(3) * 256 ^ 0 + sections(2) * 256 ^ 1 + sections(1) * 256 ^ 2 + sections(0) * 256 ^ 3
End Function

您可以使用MATCH / INDEX获取您的位置。诀窍是让您的IP TO列排序升序Match函数将返回该范围中最后一个值的行的索引,该值小于给定值。

57.182.90.111  your input
968252015      =GetNumericIP(A1)
France         =INDEX(Country,MATCH(J6,IPTO,1)+1)
  (Or alternatively) =INDEX(Country,MATCH(J6,IPFROM,1))

注意我必须导入CSV(不仅仅是从外部引用),我将列转换为命名范围(CountryIPTO)。对于其他信息,问题中链接的CSV的列名为:

  • IP FROM
  • IP TO
  • REGISTRY
  • ASSIGNED
  • CTRY
  • CNTRY
  • COUNTRY

或者,您可以仅使用公式将点分四核IP转换为其组成部分,尽管这有点麻烦。以下是前两部分(我的IP位于I5

=LEFT(I5,FIND(".",I5)-1)
=LEFT(RIGHT(I5,LEN(I5)-I10),SEARCH(".",RIGHT(I5,LEN(I5)-I10))-1)

你可以看到......有点痛苦。更简单:使用上面解释的VBA方法,或使用文本到列(在功能区上:数据>数据工具>文本到列>分隔>下一步>其他:" 。">下一步>完成)。然后编写一个公式,将您的split dotted-quad IP转换为参考数据库中的IP格式。这个公式有效:

=sumproduct(J5:M5, 256^{3,2,1,0})

请记住在上面J5:M5的列范围内。然后针对新值运行MATCH / INDEX。

答案 1 :(得分:0)

我还需要从网站访问者的IP地址中找到国家/地区名称,以便进行一些数据分析。为此,我在网络上使用了批量转换器,例如:

这些工具不错,但它们可以让您查找最大值。一次最多500个项目。因此,您可以做的是批量运行数据。 (我猜他们有偿服务,可以一次查询更多数量的商品,但没有尝试过)

我是一名Excel专家。因此,我认为应该有一种简便的方法(某种模式或公式)将这些范围转换为国家/地区。并构建了供我们内部使用的工具。最近决定发布它,可以在这里查看: IP to Country Converter Excel Template

这是一种付费工具,所以我不想在这里介绍它。但是您可以自己建立一个:

基本上,它运行VBA宏以将ip地址转换为数值,并根据国家/地区范围找到合适的匹配项。如果您熟悉VBA,则循环如下所示:

Dim dta() As Variant
dta() = Range("IP_List").Value

Dim arr() As Variant
Dim arr_v6() As Variant

arr() = Range("IP_v4").Value
arr_v6() = Range("IP_v6").Value

'generate IPV4 according to pattern 1.2.3.4 = 4 + (3 * 256) + (2 * 256 * 256) + (1 * 256 * 256 * 256)

For i = 1 To UBound(dta)

If InStr(1, dta(i, 1), ".") > 0 Then
spl = Split(dta(i, 1), ".") 'split IP in 4 integers

ip_converted = spl(3) + (spl(2) * 256) + (spl(1) * 256 * 256) + (spl(0) * 256 * 256 * 256)

'loop through array and find the country

rw = 0
rw = Application.WorksheetFunction.Match(ip_converted, Range("IP_v4"), 1)
If rw > 0 Then
dta(i, 2) = Range("V4_Country").Cells(rw, 1)
GoTo skip:
End If

这确实使我的生活更加轻松。因此,我建议您使用服务或类似的模板。

相关问题