Answers:
正如nixda在评论中提到的那样,helper列将使这成为可能。您可以通过以下两种方法来维护工作表:
步骤如下:
选择您的IP列,然后单击Data
>Text-to-Columns
选择“释放”选项,然后单击“下一步”。选中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")
;
)而不是逗号(,
)。
…&"."&…
可以省去连接的句点()并获得一个纯的十二位数字,例如010121008030,该数字也可以正确排序(尽管sort函数可能会给您带来烦人的对话框)。
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
除了约翰·霍默的答案之外,我在这里还提供了一个公式,该公式在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)