15

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

3 ответа3

19

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

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

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

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

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

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

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

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

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

3

Я понимаю, что это старый пост, но в интересах предоставления рабочего решения я представляю следующее.

Просто поместите эту формулу в соседнюю ячейку и обновите ссылки, чтобы они указывали на ячейку, содержащую ваш 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")
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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .