Sortieren der Excel-Spalte nach IP-Adresse

17

Ich habe eine ziemlich große Excel-Tabelle (über 200 Zeilen), die Elemente in meinem Netzwerk auflistet (z. B. Drucker, Server, Workstations, Netzwerkprojektoren usw.), und eine der ersten Spalten ist das Feld IP-Adresse, das die Form annimmt 192.168.x.y. Mein Problem, wenn ich versuche, es zu sortieren, ist, dass es (als Beispiel) von 192.168.0.85bis geht 192.168.0.9. Was würde Ich mag es auf der Grundlage der ersten drei Oktetts Sortierung sehen, dann das letzte Oktett logisch (dh .1, .2, .3usw.). Ist das möglich? Wenn das so ist, wie?

Kanadischer Luke
quelle

Antworten:

19

Wie nixda in den Kommentaren erwähnt hat, wird dies durch Hilfsspalten möglich. Sie haben zwei Möglichkeiten, das Blatt danach zu pflegen:

  • Fügen Sie alle neuen IP-Adressen in die geteilten Hilfsspalten ein.
  • Wiederholen Sie die Prozedur "Text in Spalten" für neue Ergänzungen.

Hier ist das Verfahren:

  1. Wählen Sie Ihre IP-Spalte aus und klicken Sie auf Data>Text-to-Columns Text in Spalten

  2. Wählen Sie die Option Delimted und klicken Sie auf Next. Aktivieren Sie das OtherKontrollkästchen und geben Sie einen Zeitraum ein .. Weiter klicken. wählen .  als Begrenzer

  3. Behalten Sie alle Spalten bei, behalten Sie sie als Allgemein bei und klicken Sie auf das Bereichssymbol, um den DestinationAbschnitt zu bearbeiten . Ziel ändern 1

  4. Wählen Sie die Spalten aus, in denen der neue Text angezeigt werden soll. Drücken Sie die Eingabetaste. Ziel ändern 2

  5. Stellen Sie sicher, dass Ihr Bereich ausgewählt ist, und klicken Sie auf Data> Sort. Geben Sie die Sortierkriterien ein. Fügen Sie für jedes Oktett weitere Ebenen hinzu. Sortierung

  6. Hier ist das Endergebnis: Ergebnis

Rishimaharaj
quelle
@nixda Yea, langsamer Schubser: P Ich wünschte, ich könnte dir auch ein paar Wiederholungen zeigen
Kanadier Luke
Entschuldigung, @nixda! Ist es für Sie illegal, auch Ihre Antwort hinzuzufügen?
Rishimaharaj
Nun, es hat geklappt ... Zeit für euch beide, um die zusätzlichen 15 Wiederholungspunkte zu kämpfen
Kanadier Luke
7

Mir ist klar, dass dies ein alter Beitrag ist, aber im Interesse einer funktionierenden Lösung präsentiere ich Folgendes.

Setzen Sie diese Formel einfach in eine benachbarte Zelle und aktualisieren Sie die Verweise, um auf die Zelle zu verweisen, die Ihre IP-Adresse enthält (A1 in diesem Beispiel). Dies ergibt ein Ergebnis ähnlich 010.121.008.030, das dann alphabetisch (korrekt) sortiert werden kann. Setzen Sie dann die Breite der neuen Spalte auf Null und voila. Zeit für eine Tasse Kaffee.

=TEXT(MID(A1,1,FIND(".",A1)),"000")&"."&TEXT(MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-1-FIND(".",A1)),"000")&"."&TEXT(MID(A1,FIND(".",A1,FIND(".",A1)+1)+1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)-1-FIND(".",A1,FIND(".",A1)+1)),"000")&"."&TEXT(MID(A1,FIND(".",A1,FIND(".",A1,FIND(".",A1)+1)+1)+1,LEN(A1)),"000")
John Homer
quelle
2
Liebe das, perfekt. Eine einzelne Formel, eine einzelne "Helfer" -Spalte. Vielen Dank.
Earls
Wie bei allen Excel-Formeln müssen Sie abhängig ;von ,den regionalen Einstellungen Ihres Systems möglicherweise Semikolons ( ) anstelle von Kommas ( ) verwenden.
Scott
1
Sie können die verketteten …&"."&…Punkte ( ) weglassen und eine einfache, zwölfstellige Zahl wie 010121008030 erhalten, die auch richtig sortiert (obwohl die Sortierfunktion möglicherweise ein nerviges Dialogfeld auf Sie wirft).
Scott
1
Sub IPSplit()

HeaderRow = 1
ColimnName = "A"
BeginIPaddsressData = 2

Dim HeaderArray As Variant
HeaderArray = Array("IP oct 1", "IP oct 2", "IP oct 3", "IP oct 4")

Dim Octet() As String
Dim RangeSearch As Range, RangeFound As Range, LastCell As Range
Dim LastCellRowNumber As Long, LastCellColumnNumber As Long, RowNumber As Long

With ActiveSheet
Set LastCell = .Cells(HeaderRow, .Columns.Count).End(xlToLeft)
LastHeaderColumnNumber = LastCell.Column

Set RangeSearch = Range("1:1")
Set RangeFound = RangeSearch.Find(What:=HeaderArray(0), LookIn:=xlValues)

If RangeFound Is Nothing Then
RowNumber = 2
    If .Cells(RowNumber, .Columns.Count) <> vbNullString Then
        Set LastCell = .Cells(RowNumber, .Columns.Count)
        LastCellColumnNumber = LastCell.Column
    Else
        Set LastCell = .Cells(RowNumber, .Columns.Count).End(xlToLeft)
'Specifies the last column LastCellColumnNumber.

        LastCellColumnNumber = LastCell.Column
    End If

Range(Cells(HeaderRow, LastCellColumnNumber + 1), Cells(HeaderRow, LastCellColumnNumber + 4)).Value = HeaderArray
'Insert Header

Else
LastCellColumnNumber = RangeFound.Column - 1
End If

Set LastCell = .Cells(.Rows.Count, ColimnName).End(xlUp)
'Specifies the last cell number in the column ColimnName.

LastCellRowNumber = LastCell.Row   
End With

    For I = BeginIPaddsressData To LastCellRowNumber

    Octet = Split(Cells(I, ColimnName).Value, ".")
    For O = 0 To 3       
'cells populate the values of octets 1-4.
      If (UBound(Octet) - O) >= 0 Then      
         Cells(I, ColimnName).Offset(0, LastCellColumnNumber + O).Value = Octet(O)
      End If
    Next
Next
End Sub
STTR
quelle
Ich kann das momentan nicht testen (nicht bei der Arbeit), aber ich werde es versuchen, wenn ich zur Arbeit komme. Dies sieht so aus, als wäre es anpassungsfähiger für längere Listen, insbesondere wenn ich nur eine Schaltfläche "Resort" hinzufüge, um dieses Makro auszuführen
Kanadier Luke,
@CanadianLuke Sie können auch eine Spalte BigIntIP erstellen. Dann können Sie alle IP-Adressen sortieren und umgekehrt von A bis Z.
STTR
Das funktioniert super! Meine einzige Bitte wäre, dass die alten Spalten wiederverwendet werden, wenn Drucker hinzugefügt werden
Kanadier Luke
@CanadianLuke Wenn Sie einen Betreff "IP oct 1" umbenennen, wird die Spalte rechts hinzugefügt. Und die Alten bleiben. Dies ist, wenn Sie eine Geschichte brauchen. Zum Beispiel bei der Migration von einem Netzwerk in einen anderen Bereich. Vielleicht habe ich die Frage nicht ganz verstanden ...
STTR
0

Zusätzlich zu John Homers Antwort TEXTgebe ich hier eine Formel an, die auch in Apples Anwendung Numbers funktioniert , da dort keine Funktion vorhanden ist. Auch in Google Text & Tabellen getestet.

=DEC2HEX(LEFT(B2,FIND(".",B2)-1),2)
&
DEC2HEX(MID(
    B2,
    FIND(".",B2)+1,
    FIND(
        ".",
        B2,
        FIND(".",B2)+1
    ) - FIND(".",B2) - 1
),2)
&
DEC2HEX(MID(
    B2,
    FIND(
        ".",
        B2,
        FIND(".",B2)+1
    ) + 1,
    FIND(
        ".",
        B2,
        FIND(
            ".",
            B2,
            FIND(".",B2)+1
        )+1
    ) - FIND(
        ".",
        B2,
        FIND(".",B2)+1
    ) - 1
),2)
&
DEC2HEX(RIGHT(
    B2,
    LEN(B2) - FIND(
        ".",
        B2,
        FIND(
            ".",
            B2,
            FIND(".",B2)+1
        )+1
    )
),2)
Hipska
quelle