У меня довольно большая (более 200 строк) электронная таблица Excel, в которой перечислены элементы в моей сети (например, принтеры, серверы, рабочие станции, сетевые проекторы и т.д.), И одним из первых столбцов является поле IP-адрес, которое принимает форму 192.168.x.y
Моя проблема, когда я пытаюсь сортировать это, состоит в том, что это идет (как пример) от 192.168.0.85
до 192.168.0.9
. То, что я хотел бы видеть, это сортировка на основе первых 3 октетов, а затем логически последнего октета (т.е. .1
, .2
, .3
и т.д.). Это возможно? Если так, то как?
3 ответа
Как упоминалось в комментариях nixda, вспомогательные столбцы сделают это возможным. У вас есть два варианта ведения листа после:
- Добавьте все новые IP-адреса в столбцах разделителя.
- Повторите процедуру Text-to-columns для новых дополнений.
Вот процедура:
Выберите столбец IP и нажмите «
Data
> «Text-to-Columns
Выберите опцию Delimted и нажмите Next. Установите флажок
Other
и введите период.
, Нажмите кнопку "Далее.Сохраните все столбцы, оставьте их как общие, щелкните значок диапазона, чтобы изменить раздел «
Destination
».Выберите столбцы, в которых вы хотите, чтобы появился новый текст. Нажмите клавишу Enter.
Убедитесь, что ваш диапазон выбран, и нажмите «
Data
> «Sort
. Введите критерии сортировки. Продолжайте добавлять уровни для каждого октета.Вот конечный результат:
Я понимаю, что это старый пост, но в интересах предоставления рабочего решения я представляю следующее.
Просто поместите эту формулу в соседнюю ячейку и обновите ссылки, чтобы они указывали на ячейку, содержащую ваш 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")
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