答案1
您可能已经意识到,您的 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)))
在单元格 B2 中将其复制到所有行的 BE 列,以获取每个 IP 地址的四个部分。现在按 B 列到 E 列(按此顺序)对整个范围进行排序,如下所示:
如果您不想看到辅助列(BE),您可以隐藏它们。
答案2
答案3
这是我之前编写的一个 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
简单示例:
结果
公式
您可以按“可排序”列进行排序并将其隐藏。
答案4
如果您不想使用公式或 VBA,请使用 Power Query。(在 Excel 2016 中,获取和转换,在 Excel 2010 或 2013 中安装 PowerQuery 插件以继续操作)。
- 将表放入 PowerQuery 编辑器。
- 右键单击“复制列”来复制该列
- 在“主页”选项卡上,按分隔符“拆分列”。选择“分隔符的每个出现位置”
- 从左到右对每列进行升序排序。
- 选择之前分割的列,右键点击并删除,关闭并加载。