sam*_*and 7 excel location ip-address ipv4 vlookup
我有一个大约5000个与IP相关的用户事件的电子表格,我正在尝试使用IP来仅使用Excel公式来确定位置.我日志中的IP结构为"点状四边形"(十进制表示法).
我认为VLOOKUP是这里的方式,所以我下载了WEBNet77的IPV4 IpToCountry数据库,这似乎是一个全面的,最新的资源(有没有更好的资源用于此目的?).该数据库包括大约140K行的IP范围,表单的结构如下:
Colum标签A-G分别为:IP FROM,IP TO,REGISTRY,ASSIGNED,CTRY,CNTRY,COUNTRY.
注意,一个问题:列A到B代表一系列IP,但是它们是"长格式"(我最初没有意识到这一点).因此,在使用这些值作为参考之前,我将必须转换我的虚线四边形.然后,我想为我日志中的每个IP返回Country(G列).
这里有什么帮助?
如果你认为有更好的方法在Excel中查找IP>国家(也许使用网络即http://api.hostip.info/flag.php?ip=xxx.xxx.xxx.xxx
),请告诉我.
您可以使用此功能将四核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
Run Code Online (Sandbox Code Playgroud)
您可以使用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))
Run Code Online (Sandbox Code Playgroud)
注意我必须导入CSV(不仅仅是从外部引用),我将列转换为命名范围(Country
,IPTO
).对于其他信息,问题中链接的CSV的列名为:
或者,您可以仅使用公式将点分四核IP转换为其组成部分,尽管这有点麻烦.这是前两个部分(我的IP在I5
)
=LEFT(I5,FIND(".",I5)-1)
=LEFT(RIGHT(I5,LEN(I5)-I10),SEARCH(".",RIGHT(I5,LEN(I5)-I10))-1)
Run Code Online (Sandbox Code Playgroud)
你可以看到......有点痛苦.更简单:使用上面解释的VBA方法,或使用文本到列(在功能区上:数据>数据工具>文本到列>分隔>下一步>其他:".">下一步>完成).然后编写一个公式,将您的split dotted-quad IP转换为参考数据库中的IP格式.这个公式有效:
=sumproduct(J5:M5, 256^{3,2,1,0})
请记住在J5:M5
上面的列范围内.然后针对新值运行MATCH/INDEX.
归档时间: |
|
查看次数: |
12004 次 |
最近记录: |