按IP地址排序Excel列


17

我有一个很大的Excel电子表格(超过200行),该电子表格列出了我的网络中的项目(例如打印机,服务器,工作站,网络投影仪等),第一列之一是IP地址字段,其格式为192.168.x.y。我尝试排序时的问题是(例如)从192.168.0.85192.168.0.9。我想看到的是它基于第一3个字节排序,那么最后一个字节逻辑(即.1.2.3,等)。这可能吗?如果是这样,怎么办?

Answers:


19

正如nixda在评论中提到的那样,helper列将使这成为可能。您可以通过以下两种方法来维护工作表:

  • 在拆分助手列中添加所有新IP。
  • 重复“文本到列”过程以添加新内容。

步骤如下:

  1. 选择您的IP列,然后单击Data>Text-to-Columns 文本 - 列

  2. 选择“释放”选项,然后单击“下一步”。选中Other复选框并输入句点.。点击下一步。 选择。 作为分隔符

  3. 保留所有列,将其保留为“常规”,单击范围图标以编辑该Destination部分。 更改目标1

  4. 选择要在其中显示新文本的列。按下Enter键。 更改目标2

  5. 确保选择了您的范围,然后单击Data> Sort。输入排序条件。继续为每个八位位组添加级别。 排序

  6. 这是最终结果: 结果


@nixda是的,慢速戳:P希望我也能像您一样做一些代表
加拿大路加福音

抱歉,@ nixda!您也添加答案是否非法?
rishimaharaj

好吧,它奏效了...你们两个人争取额外的15个代表积分的时间
加拿大路加福音

7

我意识到这是一个古老的职位,但是为了提供一个可行的解决方案,我提出以下内容。

只需将此公式放在相邻的单元格中,然后更新引用以指向包含您的IP地址(在此示例中为A1)的单元格即可。这将产生类似于010.121.008.030的结果,然后可以按字母顺序(正确)排序。然后将新列的宽度设置为零,瞧。是时候享用一杯咖啡了。

=TEXT(MID(A1,1,FIND(".",A1)),"000")&"."&TEXT(MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-1-FIND(".",A1)),"000")&"."&TEXT(MID(A1,FIND(".",A1,FIND(".",A1)+1)+1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)-1-FIND(".",A1,FIND(".",A1)+1)),"000")&"."&TEXT(MID(A1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)+1,LEN(A1)),"000")

2
爱这个,完美。单个公式,一个“助手”单个列。谢谢。
2015年

与所有Excel公式一样,您可能需要根据系统的区域设置使用分号(;)而不是逗号(,)。
斯科特(Scott)

1
…&"."&…可以省去连接的句点()并获得一个纯的十二位数字,例如010121008030,该数字也可以正确排序(尽管sort函数可能会给您带来烦人的对话框)。
斯科特(Scott)

1
Sub IPSplit()

HeaderRow = 1
ColimnName = "A"
BeginIPaddsressData = 2

Dim HeaderArray As Variant
HeaderArray = Array("IP oct 1", "IP oct 2", "IP oct 3", "IP oct 4")

Dim Octet() As String
Dim RangeSearch As Range, RangeFound As Range, LastCell As Range
Dim LastCellRowNumber As Long, LastCellColumnNumber As Long, RowNumber As Long

With ActiveSheet
Set LastCell = .Cells(HeaderRow, .Columns.Count).End(xlToLeft)
LastHeaderColumnNumber = LastCell.Column

Set RangeSearch = Range("1:1")
Set RangeFound = RangeSearch.Find(What:=HeaderArray(0), LookIn:=xlValues)

If RangeFound Is Nothing Then
RowNumber = 2
    If .Cells(RowNumber, .Columns.Count) <> vbNullString Then
        Set LastCell = .Cells(RowNumber, .Columns.Count)
        LastCellColumnNumber = LastCell.Column
    Else
        Set LastCell = .Cells(RowNumber, .Columns.Count).End(xlToLeft)
'Specifies the last column LastCellColumnNumber.

        LastCellColumnNumber = LastCell.Column
    End If

Range(Cells(HeaderRow, LastCellColumnNumber + 1), Cells(HeaderRow, LastCellColumnNumber + 4)).Value = HeaderArray
'Insert Header

Else
LastCellColumnNumber = RangeFound.Column - 1
End If

Set LastCell = .Cells(.Rows.Count, ColimnName).End(xlUp)
'Specifies the last cell number in the column ColimnName.

LastCellRowNumber = LastCell.Row   
End With

    For I = BeginIPaddsressData To LastCellRowNumber

    Octet = Split(Cells(I, ColimnName).Value, ".")
    For O = 0 To 3       
'cells populate the values of octets 1-4.
      If (UBound(Octet) - O) >= 0 Then      
         Cells(I, ColimnName).Offset(0, LastCellColumnNumber + O).Value = Octet(O)
      End If
    Next
Next
End Sub

我目前无法测试(不在工作中),但是上班时会尝试一下。这看起来像它会更适应更长的名单,尤其是当我刚加入“度假”按钮运行此宏
加拿大卢克

@CanadianLuke您也可以创建一列BigIntIP。然后,您可以对所有IP地址进行排序,反之亦然。
STTR

这很棒!我唯一的要求是,当添加打印机时,它会重用旧的列
Canadian Luke

@CanadianLuke如果将主题重命名为“ IP oct 1”,则该列将添加到右侧。和旧的仍然存在。这是如果您需要一个故事。例如,当从一个网络迁移到另一范围时。也许我不太明白这个问题……
STTR

0

除了约翰·霍默的答案之外,我在这里还提供了一个公式,该公式在Apple的Numbers应用程序中也适用,因为该TEXT函数不存在。还在Google文档中进行了测试。

=DEC2HEX(LEFT(B2,FIND(".",B2)-1),2)
&
DEC2HEX(MID(
    B2,
    FIND(".",B2)+1,
    FIND(
        ".",
        B2,
        FIND(".",B2)+1
    ) - FIND(".",B2) - 1
),2)
&
DEC2HEX(MID(
    B2,
    FIND(
        ".",
        B2,
        FIND(".",B2)+1
    ) + 1,
    FIND(
        ".",
        B2,
        FIND(
            ".",
            B2,
            FIND(".",B2)+1
        )+1
    ) - FIND(
        ".",
        B2,
        FIND(".",B2)+1
    ) - 1
),2)
&
DEC2HEX(RIGHT(
    B2,
    LEN(B2) - FIND(
        ".",
        B2,
        FIND(
            ".",
            B2,
            FIND(".",B2)+1
        )+1
    )
),2)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.