Сортировка столбца Excel по IP-адресу

17

У меня довольно большая (более 200 строк) электронная таблица Excel, в которой перечислены элементы в моей сети (например, принтеры, серверы, рабочие станции, сетевые проекторы и т. Д.), И одним из первых столбцов является поле IP-адрес, которое принимает форму 192.168.x.y. Моя проблема, когда я пытаюсь разобраться, состоит в том, что это идет (в качестве примера) от 192.168.0.85к 192.168.0.9. То , что я хотел бы видеть это сортировка на основе первых 3 октетов, то последний октет логически (т.е. .1, .2, .3и т.д.). Это возможно? Если так, то как?

Канадский Люк
источник

Ответы:

19

Как упоминалось в комментариях nixda, вспомогательные столбцы сделают это возможным. У вас есть два варианта ведения листа после:

  • Добавьте все новые IP-адреса в столбцах разделителя.
  • Повторите процедуру преобразования текста в столбцы для новых дополнений.

Вот процедура:

  1. Выберите столбец IP и нажмите Data>Text-to-Columns текст в колонки

  2. Выберите опцию Delimted и нажмите Next. Установите Otherфлажок и введите период .. Нажмите кнопку "Далее. выберите .  в качестве разделителя

  3. Сохраните все столбцы, оставьте их как общие, щелкните значок диапазона, чтобы изменить Destinationраздел. изменить Dest 1

  4. Выберите столбцы, в которых вы хотите, чтобы появился новый текст. Нажмите клавишу Enter. изменить Dest 2

  5. Убедитесь, что ваш диапазон выбран и нажмите Data> Sort. Введите критерии сортировки. Продолжайте добавлять уровни для каждого октета. сортировка

  6. Вот конечный результат: результат

rishimaharaj
источник
@ nixda Да, медленно тыкай: P Хотел бы я также сделать несколько повторений на твоем пути
канадец Люк
Извините, @nixda! Это незаконно для вас, чтобы добавить свой ответ, а?
ришимахарадж
Ну, это сработало ... Пора вам двоим бороться за дополнительные 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
Люблю это, идеально. Одна формула, один вспомогательный столбец. Благодарю.
Earls
Как и во всех формулах Excel, вам может потребоваться использовать точки с запятой ( ;) вместо запятых ( ,) в зависимости от региональных настроек вашей системы.
Скотт
1
Вы можете …&"."&…опустить объединенные точки ( ) и получить простое двенадцатизначное число, такое как 010121008030, которое также будет сортировать правильно (хотя функция сортировки может вызвать у вас раздражающее диалоговое окно).
Скотт
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
STTR
источник
Я не могу проверить это сейчас (не на работе), но попробую, когда доберусь до работы. Похоже, это было бы более адаптируемо для более длинных списков, особенно если я просто добавлю кнопку «Курорт» для запуска этого макроса
канадский Люк
@CanadianLuke Вы также можете создать столбец BigIntIP. Затем вы можете отсортировать все IP-адреса и наоборот AZ.
STTR
Это прекрасно работает! Моя единственная просьба - использовать старые столбцы при добавлении принтеров
канадец Люк
@CanadianLuke Если вы переименуете тему «IP oct 1», столбец будет добавлен справа. И старые остаются. Это если вам нужна история. Например, при миграции из одной сети в другую. Может быть, я не совсем понял вопрос ...
STTR
0

В дополнение к ответу Джона Гомера я приведу здесь формулу, которая также работает в приложении Apple Numbers, поскольку там нет TEXTфункции. Также проверено в Google Docs.

=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)
Hipska
источник