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

时间:2015-07-24 14:05:01

标签: excel excel-formula formula excel-2013

我想使用公式将IP地址的八位字节分开。

我尝试过像替代品这样的东西。找到但无法弄明白。

我想要实现的目标示例,仅从单元格A1和单元格B1开始:

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

3 个答案:

答案 0 :(得分:15)

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

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

enter image description here

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

EXCELFOX

的更多信息

答案 1 :(得分: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))

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

=FIND(".",A1,4)

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

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

现在得到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)

这样你就可以在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

并为您提供这样的公式

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)

不像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

该公式看起来像

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

答案 2 :(得分:1)

  

如图所示,第1行是从A1开始的IP地址(IPv4)。

  |      A      |      B
--+-------------+-------------
1 | 10.17.9.192 | 192.168.0.1
2 | 10          | 192
3 | 17          | 168
4 | 9           | 0
5 | 192         | 1

解决方案

  • 第1部分(单元格A2):=VALUE( LEFT(SUBSTITUTE(A1, ".", " "), 3 ))
  • 第二部分(单元格A3):=VALUE( MID(SUBSTITUTE(A1, ".", " "), 8, 5 ))
  • 第3部分(单元格A4):=VALUE( MID(SUBSTITUTE(A1, ".", " "), 15, 7))
  • 第4部分(单元格A5):=VALUE(RIGHT(SUBSTITUTE(A1, ".", " "), 3 ))

将公式填写到右侧。

注意:如果您希望以文本格式显示结果,则可以使用TRIM(...)代替VALUE(...)

奖励:获取格式化IP地址的单一公式

我们可以通过以下公式获得格式化的IP地址 001.002.003.004

= TEXT( LEFT(SUBSTITUTE(A1, ".", "      "), 3    ), "000") & "."
& TEXT(  MID(SUBSTITUTE(A1, ".", "      "), 8, 5 ), "000") & "."
& TEXT(  MID(SUBSTITUTE(A1, ".", "      "), 15, 7), "000") & "."
& TEXT(RIGHT(SUBSTITUTE(A1, ".", "      "), 3    ), "000")

说明

SUBSTITUTE.有6个空格,我们得到:

                   |123456789|123546789|123456789|
1.1.1.1         ->  1      1      1      1
11.11.11.11     ->  11      11      11      11
111.111.111.111 ->  111      111      111      111
                    =1=    ==2==  ===3===
  • 字符1-3包含且仅包含第一部分。
  • 字符8-12包含且仅包含第二部分。
  • 字符15-21包含且仅包含第三部分。
  • 最右边3个字符包含且仅包含第四部分。