使用公式分隔IP地址的八位字节

我想分开使用公式的IP地址的八位组。

我已经尝试了一些像替代和发现的东西,但无法弄清楚这一点。

我想要实现的例子,只从Cell A1和Cell B1

 10.17.9.192 | 192.168.0.1 10 | 192 17 | 168 9 | 0 192 | 1 

这里有四个你需要的公式

 A2:=LEFT(A1,FIND(".",A1)-1) A3:=MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-FIND(".",A1)-1) A4:=MID(A1,FIND(".",A1,FIND(".",A1)+1)+1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)-(FIND(".",A1,FIND(".",A1)+1)+1)) A5:=MID(A1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)+1,LEN(A1)-FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)) 

FIND函数有一个名为start的第三个参数。 所以要find第二个小数点,你find一个小数点,但你开始第一个小数点加1。 这将是这样的

 =FIND(".",A1,4) 

你从4开始,因为你的第一个小数点位于3,但是你不知道,所以你必须计算'4'。

 =FIND(".",A1,FIND(".",A1)+1) 

现在得到4,我们find第一个小数,并加1。这不是第二次发现。 但要find第三个,你必须去另一个层面。 而第四个是另一个层次。 这很难阅读,很难维护。

为了使它更容易,你可以使用助手列。

 A2 =LEFT(A1,C2-1) C2 =FIND(".",A1) A3 =MID(A1,C2+1,C3-C2-1) C3 =FIND(".",A1,C2+1) A4 =MID(A1,C3+1,C4-C3-1) C4 =FIND(".",A1,C3+1) A5 =MID(A1,C4+1,LEN(A1)-C4-1) 

这样你就可以用C做你的FIND了

如果你不喜欢帮手列,而我不喜欢,你可以写一个UDF

 Public Function FINDi(find_text As String, within_text As String, Optional instance As Long) As Long Dim lReturn As Long Dim i As Long Const lFINDFIRST As Long = 0 If instance = lFINDFIRST Then lReturn = InStr(1, within_text, find_text) ElseIf instance < lFINDFIRST Then 'negative numbers finds last lReturn = InStrRev(within_text, find_text) Else lReturn = 0 For i = 1 To instance lReturn = InStr(lReturn + 1, within_text, find_text) Next i End If FINDi = lReturn End Function 

这给你这样的公式

 A2 =LEFT(A1,findi(".",A1)-1) A3 =MID(A1,findi(".",A1)+1,findi(".",A1,2)-findi(".",A1,1)-1) A4 =MID(A1,findi(".",A1,2)+1,findi(".",A1,3)-findi(".",A1,2)-1) A5 =MID(A1,findi(".",A1,3)+1,LEN(A1)-findi(".",A1,3)-1) 

不像辅助列那样干净,但自我包含,绝对比内置FIND更好。

你可以写的另一个UDF复制了VBA的分割函数。

 Public Function SplitString(ByVal sInput As String, ByVal sDelim As String, ByVal lWhich As Long) As String SplitString = Split(sInput, sDelim)(lWhich - 1) End Function 

那个公式看起来像

 A2 =SplitString($A$1,".",ROW()-1) A3 =SplitString($A$1,".",ROW()-1) A4 =SplitString($A$1,".",ROW()-1) A5 =SplitString($A$1,".",ROW()-1) 

这是经典的一个公式解决scheme:

 =TRIM(MID(SUBSTITUTE(A$1,".",REPT(" ",999)),(ROW()-1)*999-998,999)) 

在这里输入图像说明

"." – 是分隔符。
(ROW()-1) – 在分隔文本中给出第n项。

更多信息在EXCELFOX