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

Luk*_*den 7 excel formula excel-formula excel-2013

我想使用公式分离出IP地址的八位字节.

我尝试过像替换和查找这样的东西,但无法解决这个问题.

我想要实现的例子,仅从Cell A1和Cell开始B1:

10.17.9.192 | 192.168.0.1
10          | 192
17          | 168
9           | 0
192         | 1
Run Code Online (Sandbox Code Playgroud)

zx8*_*754 15

这是经典的一种配方解决方案:

=TRIM(MID(SUBSTITUTE(A$1,".",REPT(" ",999)),(ROW()-1)*999-998,999))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

更多信息在EXCELFOX


Dic*_*ika 8

这里有四个你需要的公式

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))
Run Code Online (Sandbox Code Playgroud)

FIND函数有一个名为start的第三个参数.因此,要找到第二个小数点,您需要查找小数点,但是从第一个小数点加1开始.就像这样

=FIND(".",A1,4)
Run Code Online (Sandbox Code Playgroud)

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

=FIND(".",A1,FIND(".",A1)+1)
Run Code Online (Sandbox Code Playgroud)

现在得到4,我们找到第一个小数,然后加1.找到第二个小数点并不算太糟糕.但要找到第三个,你必须走另一个层次.而第四个是另一个层面.它难以阅读且难以维护.

为了使它更容易一些,您可以使用辅助列.

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)
Run Code Online (Sandbox Code Playgroud)

那样你就用C做你的FIND并参考A中的那些数字.

如果您不喜欢帮助列,而我不喜欢,那么您可以编写类似的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
Run Code Online (Sandbox Code Playgroud)

这给你这样的公式

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)
Run Code Online (Sandbox Code Playgroud)

不像helper列那样干净,但是自包含并且肯定比内置的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
Run Code Online (Sandbox Code Playgroud)

那个公式看起来像

A2        =SplitString($A$1,".",ROW()-1)
A3        =SplitString($A$1,".",ROW()-1)
A4        =SplitString($A$1,".",ROW()-1)
A5        =SplitString($A$1,".",ROW()-1)
Run Code Online (Sandbox Code Playgroud)