如何在Excel中用自定义公式、VBA或格式代码批量转换IP段格式?
IP段格式批量转换解决方案
以下提供两种可直接使用的实现方案,完全匹配你给出的转换规则:
方案1:Excel自定义公式(仅支持Excel 365/2021及以上版本)
假设原始IP段存储在A列,在B1单元格粘贴以下公式,下拉即可批量填充:
=LET( 分隔符," - ", 起始IP,TEXTBEFORE(A1,分隔符), 结束IP,TEXTAFTER(A1,分隔符), 拆起始,TEXTSPLIT(起始IP,"."), 拆结束,TEXTSPLIT(结束IP,"."), 前三段相同,INDEX(拆起始,1)&INDEX(拆起始,2)&INDEX(拆起始,3)=INDEX(拆结束,1)&INDEX(拆结束,2)&INDEX(拆结束,3), 前两段相同,INDEX(拆起始,1)&INDEX(拆起始,2)=INDEX(拆结束,1)&INDEX(拆结束,2), IF(前三段相同, INDEX(拆起始,1)&"."&INDEX(拆起始,2)&"."&INDEX(拆起始,3)&"."&INDEX(拆起始,4)&"-"&INDEX(拆结束,4), IF(前两段相同, INDEX(拆起始,1)&"."&INDEX(拆起始,2)&"."&INDEX(拆起始,3)&"-"&INDEX(拆结束,3)&".*", "格式不匹配" ) ) )
方案2:VBA自定义函数(支持所有Excel版本)
操作步骤:
- 按
Alt+F11打开VBA编辑器 - 右键点击当前工作簿名称→插入→模块
- 将以下代码粘贴到模块编辑区,保存文件(如果是.xlsx格式需要另存为.xlsm启用宏格式)
- 回到工作表,在B1单元格输入
=IPConvert(A1),下拉即可批量转换
Function IPConvert(ByVal IPstr As String) As String Dim splitArr, startIP, endIP, startSeg, endSeg splitArr = Split(IPstr, " - ") If UBound(splitArr) <> 1 Then IPConvert = "输入格式错误" Exit Function End If startIP = splitArr(0) endIP = splitArr(1) startSeg = Split(startIP, ".") endSeg = Split(endIP, ".") If UBound(startSeg) <> 3 Or UBound(endSeg) <> 3 Then IPConvert = "IP格式错误" Exit Function End If If startSeg(0) = endSeg(0) And startSeg(1) = endSeg(1) Then If startSeg(2) = endSeg(2) Then IPConvert = startSeg(0) & "." & startSeg(1) & "." & startSeg(2) & "." & startSeg(3) & "-" & endSeg(3) Else IPConvert = startSeg(0) & "." & startSeg(1) & "." & startSeg(2) & "-" & endSeg(2) & ".*" End If Else IPConvert = "不支持的IP段格式" End If End Function
注意事项
- 如果原始IP段的分隔符不是「空格-空格」,自行修改公式或代码里的分隔符参数即可
- 两种方案均严格匹配你给出的转换规则,仅支持前两段相同的连续IP段转换
内容的提问来源于stack exchange,提问作者Lauren
相关产品推荐
相关产品推荐

