Отдельные октеты IP-адреса с использованием формул
Я хочу отделить октеты IP-адреса с помощью формул.
Я пробовал некоторые вещи, такие как substitute & find, но не могу понять это.
пример того, что я хочу достичь, только начиная с ячейки A1
и сотовый B1
:
10.17.9.192 | 192.168.0.1
10 | 192
17 | 168
9 | 0
192 | 1
3 ответов
вот четыре формулы, которые вам нужны
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 имеет третий аргумент с именем старт. Итак, чтобы найти вторую десятичную точку, вы находите десятичную точку, но начинаете с первой десятичной точки плюс один. Было бы вот так!--9-->
=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 и ссылаетесь на эти числа в 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)
не так чисто, как вспомогательная колонка, но автономно и определенно лучше, чем встроенная находка.
другой 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,".",ROW()-1)
A3 =SplitString($A,".",ROW()-1)
A4 =SplitString($A,".",ROW()-1)
A5 =SplitString($A,".",ROW()-1)
вот классическое решение одной формулы:
=TRIM(MID(SUBSTITUTE(A,".",REPT(" ",999)),(ROW()-1)*999-998,999))
"."
- это разделитель.(ROW()-1)
- дает N-й элемент в тексте с разделителями.
более подробная информация EXCELFOX
как показано в вопрос, строка 1 являются IP-адресами (IPv4), начиная с A1.
решение
- войдите в A2:
=VALUE( LEFT(SUBSTITUTE(A1, ".", " "), 3 ))
, который является 1-й частью - войдите в A3:
=VALUE( MID(SUBSTITUTE(A1, ".", " "), 8, 5 ))
- 2-е части - войдите в A4:
=VALUE( MID(SUBSTITUTE(A1, ".", " "), 15, 7))
, который является 3-й частью - войдите в A5:
=VALUE(RIGHT(SUBSTITUTE(A1, ".", " "), 3 ))
, который является 4-й частью
заполните формулы право.
Примечание: Вы можете использовать TRIM
вместо VALUE
если вы хотите результат в текстовом формате.
объяснение
By SUBSTITUTE
ing точка .
С 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 символа содержат и содержат только четвертую часть.
бонус
мы можем получить форматированный 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")