使用公式分隔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