如何让 Excel 中包含 IP 地址的单元格正确排序?

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),您可以隐藏它们。

  • 与其拆分为四列,不如将“第一*256^3+第二*256^2+第三*256+第四”之类的字节“连接”在一列中更好? (12认同)

Raj*_*nha 10

最简单的 3 步解决方案我建议你是,,,

  1. 选择 IP 地址列,应用文本到列命令。

  2. 在相邻的列中写下这个公式

    =CONCATENATE(B3,".",C3,".",D3,".",E3)

  3. 最后按升序排序。

检查屏幕截图。

在此处输入图片说明

注意:

红色是原始 IP 地址(在 A 列中)。

将文本应用到列(列 B 到 E)后呈绿色

黑色是应用连接和排序后(F 列)。

原因很简单,原来 IP 地址是文本数据,Excel 不接受任何单元格格式将其转换为数字。

希望这对你有帮助。

  • 这太可怕了。您永远不想混淆来自不同行的数据。 (4认同)
  • 他的意思是你应该在排序中包含原始的 A 列,这样每一行的 iP 地址都是相同的。 (2认同)

gra*_*j42 9

这是我前段时间写的一个 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)

简单的例子:

结果

结果

公式

公式

您可以按“可排序”列进行排序并将其隐藏。

  • 我只想指出,可排序的 IP 地址将解析为与原始地址不同的地址(因为有些白痴选择将它们解释为八进制)。所以只将它们用于排序,不要将它们视为正确的 IP。 (4认同)

Rud*_*dyB 8

这是一个只需要表格中的 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 地址,因为公式中的错误更正会使人工解析变得更糟。