Mon*_*eth 37 ip-address sorting microsoft-excel
我目前正在处理大量 IP 地址(数千个)。
但是,当我对包含 IP 地址的列进行排序时,它们的排序方式并不直观或易于理解。
例如,如果我输入 IP 地址如下:
然后如果我按升序排序,我会得到这个:
有没有办法让我格式化单元格,例如,当按升序排序时,IP 地址 17.255.253.65 出现在1.128.96.254之后和103.236.162.56之前?
如果没有,我还有其他方法可以达到这个终极目标吗?
Bla*_*ood 42
您可能已经意识到,您的 IP 地址被视为文本而不是数字。它们按文本排序,这意味着以“162”开头的地址将排在以“20”开头的地址之前。(因为字符“1”在字符“2”之前。
您可以使用此答案中提供的公式:https : //stackoverflow.com/a/31615838/4424957将 IP 地址拆分为多个部分。
如果您的 IP 地址在 A 列中,请添加列 BE,如下所示。
输入公式
=VALUE(TRIM(MID(SUBSTITUTE($A2,".",REPT(" ",999)),(B$1)*999-998,999)))
Run Code Online (Sandbox Code Playgroud)
在单元格 B2 中并将其复制到所有行中的列 BE 以获取每个 IP 地址的四个部分。现在按列 B 到 E(按此顺序)对整个范围进行排序,如下所示:
如果您不想看到辅助列 (BE),您可以隐藏它们。
Raj*_*nha 10
最简单的 3 步解决方案我建议你是,,,
选择 IP 地址列,应用文本到列命令。
在相邻的列中写下这个公式
=CONCATENATE(B3,".",C3,".",D3,".",E3)
最后按升序排序。
检查屏幕截图。
注意:
红色是原始 IP 地址(在 A 列中)。
将文本应用到列(列 B 到 E)后呈绿色。
黑色是应用连接和排序后(F 列)。
原因很简单,原来 IP 地址是文本数据,Excel 不接受任何单元格格式将其转换为数字。
希望这对你有帮助。
这是我前段时间写的一个 VBA 函数来解决同样的问题。它生成一个正确排序的 IPv4 地址的填充版本。
Function SortAddress(Address As String) ' format address as XXX.XXX.XXX.XXX to permit sorting
Dim FirstByte As Integer, LastByte As Integer, I As Integer
SortAddress = ""
FirstByte = 1
For I = 0 To 2 ' process the first three bytes
LastByte = InStr(FirstByte, Address, ".") ' find the dot
' append the byte as 3 digits followed by dot
SortAddress = SortAddress & Format(Mid(Address, FirstByte, LastByte - FirstByte), "000\.")
FirstByte = LastByte + 1 ' shift the start pointer
Next I
SortAddress = SortAddress & Format(Mid(Address, FirstByte), "000") ' process the last byte
End Function
Run Code Online (Sandbox Code Playgroud)
简单的例子:
结果
公式
您可以按“可排序”列进行排序并将其隐藏。
这是一个只需要表格中的 1 列的答案,并将 IPv4 地址转换为以 10 为基数的编号。
由于您将数据放在“M”列中,因此从单元格 M2 开始(M1 是标签)。将其封装为代码会造成一团糟,所以我使用了块引用:
=INT(LEFT(M2, FIND(".", M2) - 1)) * 256 ^ 3 + INT(MID(M2, FIND(".", M2) + 1, FIND(".", M2, FIND) (".", M2) + 1) - FIND(".", M2)-1)) * 256 ^ 2 + INT(MID(M2, FIND(".", M2, FIND(".", M2)) + 1) + 1, FIND(".", M2, FIND(".", M2, FIND(".", M2) + 1) + 1) - FIND(".", M2, FIND(".") , M2) + 1) - 1)) * 256 + INT(RIGHT(M2, LEN(M2) - FIND(".", M2, FIND(".", M2, FIND(".", M2) + 1) ) + 1)))
不完全是最容易阅读的公式,但您可以将其复制并粘贴到您的单元格中(最好是 N2 或与您的第一个 IP 地址在同一行中的其他内容)。它假定正确格式化 IP 地址,因为公式中的错误更正会使人工解析变得更糟。
| 归档时间: |
|
| 查看次数: |
39039 次 |
| 最近记录: |