4

IP アドレスを構成するオクテットに先行ゼロを追加する関数を Excel で作成しようとしています。たとえば、172.19.1.17 で .19. .019.まで、.1. .001.まで、そして最後の.17から.017まで。

Te Cells.Teplace 関数が受け入れないようです。ワイルドカードとして。また、「文字列の終わり」を表現できる方法があるので、最後のオクテット (上記の例では .17) に先行ゼロを追加できます。

ありがとうイアン

Cells.Replace What:=".1?.", Replacement:=".01?.", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

これは「10」を見つけます。「11.」「12.」などですが、すべて「.01?」に置き換えます。

4

3 に答える 3

3

別の方法として、次の式を使用して IP 部分にゼロを追加することもできます (ひどいように見えますが、すべての部分を別々に扱い、最終的にそれらを混ぜ合わせます)。

=REPT(0,4-FIND(".",A1))&LEFT(A1,FIND(".",A1)-1)&"."&
REPT(0,4-FIND("@",SUBSTITUTE(A1,".","@",2))+FIND(".",A1))&MID(A1,FIND(".",A1)+1,FIND("@",SUBSTITUTE(A1,".","@",2))-FIND(".",A1)-1)&"."&
REPT(0,4-FIND("@",SUBSTITUTE(A1,".","@",3))+FIND("@",SUBSTITUTE(A1,".","@",2)))&MID(A1,FIND("@",SUBSTITUTE(A1,".","@",2))+1,FIND("@",SUBSTITUTE(A1,".","@",3))-FIND("@",SUBSTITUTE(A1,".","@",2))-1)&"."&
REPT(0,3-LEN(A1)+FIND("@",SUBSTITUTE(A1,".","@",3)))&RIGHT(A1,LEN(A1)-FIND("@",SUBSTITUTE(A1,".","@",3)))

改行に関係なく、そのまま貼り付けることができB1ます(IPが列Aにあると仮定します)。A1

サンプルファイル: https://www.dropbox.com/s/vun6urvukch9uvv/IPoctets.xlsx

于 2013-02-20T19:02:40.523 に答える
1

私もプレイできますか:)?

これは、上記の私のコメントに続きます。これは、それを見つけ.??.て作成する方法の例です.0??.

データはワークシートのどこにでもあると想定しています。

Sub Sample()
    Dim oRange As Range, aCell As Range, bCell As Range
    Dim ws As Worksheet
    Dim ExitLoop As Boolean
    Dim SearchString As String

    On Error GoTo Whoa

    Set ws = Worksheets("Sheet1")
    Set oRange = ws.Cells

    SearchString = ".??."

    Set aCell = oRange.Find(What:=SearchString, LookIn:=xlValues, _
                LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)

    If Not aCell Is Nothing Then
        Set bCell = aCell

        aCell.Value = CleanIt(aCell.Value)

        Do While ExitLoop = False
            Set aCell = oRange.FindNext(After:=aCell)

            If Not aCell Is Nothing Then
                If aCell.Address = bCell.Address Then Exit Do
                aCell.Value = CleanIt(aCell.Value)
            Else
                ExitLoop = True
            End If
        Loop
    End If
    Exit Sub
Whoa:
    MsgBox Err.Description
End Sub

Function CleanIt(rng)
    Dim MyAr() As String
    Dim strTemp As String

    MyAr = Split(rng, ".")

    For i = LBound(MyAr) To UBound(MyAr)
        If Len(MyAr(i)) = 2 Then
            MyAr(i) = "0" & MyAr(i)
        End If
        strTemp = strTemp & "." & MyAr(i)
    Next i
    CleanIt = Mid(strTemp, 2)
End Function

スクリーンショット

ここに画像の説明を入力

: これはデモンストレーション目的の単なる例です。上記のコードは、他のシナリオも処理できるように、さらに微調整する必要があります。

于 2013-02-20T19:17:25.387 に答える
1

次のようなことができます。

Application.UsedRange を IP アドレスを含む実際の範囲に置き換えてください。

Sub PadIP()
    Dim Arr As Variant
    Dim ipAddr As String
    Dim vCell As Variant
    Dim n As Long

    'Replace ActiveSheet.UsedRange with the range containing your data
    '
    'If data is contained in column A and you have a column header
    'Example: Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 1))
    For Each vCell In ActiveSheet.UsedRange
        Arr = Split(vCell.Value, ".")

        For n = 0 To UBound(Arr)
            If (n + 1) Mod 4 = 0 Then
                ipAddr = ipAddr & Right(String(3, "0") & Arr(n), 3)
            Else
                ipAddr = ipAddr & Right(String(3, "0") & Arr(n), 3) & "."
            End If
        Next
       vCell.Value = ipAddr
       ipAddr = ""
    Next
End Sub
于 2013-02-20T19:02:36.673 に答える