Wie erhalte ich Zellen in Excel, die IP-Adressen enthalten, um richtig zu sortieren?

34

Ich arbeite derzeit mit einer großen Liste von IP-Adressen (Tausende von ihnen).

Wenn ich die Spalte mit den IP-Adressen sortiere, werden sie jedoch nicht auf intuitive oder leicht verständliche Weise sortiert.

Wenn ich zum Beispiel IP-Adressen wie folgt eingebe:

Bildbeschreibung hier eingeben

Und wenn ich dann in aufsteigender Reihenfolge sortiere, erhalte ich Folgendes:

Bildbeschreibung hier eingeben

Kann ich die Zellen so formatieren, dass beispielsweise eine IP-Adresse von 17.255.253.65 nach 1.128.96.254 und vor 103.236.162.56 in aufsteigender Reihenfolge angezeigt wird?

Wenn nicht, gibt es einen anderen Weg für mich, um dieses ultimative Ziel zu erreichen?

Monomeeth
quelle
3
Die Sortierung wird durch die Zellenformatierung nicht beeinflusst.
Blackwood
1
Das ist interessant - ich war mir ziemlich sicher, dass sich das Format einer Zelle in einigen Fällen auf das Sortieren auswirkt, und dachte, dass dies vielleicht eines davon ist. Danke für die Klarstellung!
Monomeeth
1
Und Bruce hilft Ihnen, wenn IPv6-Adressen benötigt werden!
Criggie

Antworten:

42

Wie Sie vielleicht bemerkt haben, werden Ihre IP-Adressen als Text und nicht als Zahlen behandelt. Sie werden als Text sortiert, dh Adressen, die mit "162" beginnen, stehen vor Adressen, die mit "20" beginnen. (weil das Zeichen "1" vor dem Zeichen "2" steht.

Sie können die in dieser Antwort angegebene Formel verwenden: https://stackoverflow.com/a/31615838/4424957 , um die IP-Adresse in ihre Teile aufzuteilen.

Wenn sich Ihre IP-Adressen in den Spalten A befinden, fügen Sie die Spalten BE wie unten gezeigt hinzu.

Bildbeschreibung hier eingeben

Geben Sie die Formel ein

=VALUE(TRIM(MID(SUBSTITUTE($A2,".",REPT(" ",999)),(B$1)*999-998,999)))

in Zelle B2 und kopieren Sie es in die Spalten BE in allen Zeilen, um die vier Teile jeder IP-Adresse zu erhalten. Sortieren Sie nun den gesamten Bereich nach den Spalten B bis E (in dieser Reihenfolge), wie unten gezeigt:

Bildbeschreibung hier eingeben

Wenn Sie die Hilfsspalten (BE) nicht sehen möchten, können Sie sie ausblenden.

Schwarzes Holz
quelle
12
Anstatt in vier Spalten aufzuteilen, ist es vielleicht besser, die Bytes wie first*256^3+second*256^2+third*256+fourthin einer Spalte zu "verketten" ?
Ruslan
Zumal IPv4-Adressen eigentlich nur 32-Bit-Nummern sind. Die vier 4-Bit-Anzeige von IP-Adressen dient ausschließlich der besseren Lesbarkeit.
Kat
@Kat Ich bin damit einverstanden, dass das funktionieren würde, und es wird nur eine Hilfsspalte anstelle von vier benötigt. Aber die Formel in dieser einen Spalte wäre ziemlich lang, also habe ich mich für vier Spalten entschieden (wahrscheinlich würde ich sie auf jeden Fall ausblenden).
Blackwood
10

Die einfachste, 3 Schritte Lösung, die ich vorschlagen kann, sind ,,,

  1. Wählen Sie die IP-Adressenspalte aus und wenden Sie den Befehl Text auf Spalte an .

  2. In der nebenstehenden Spalte schreiben Sie diese Formel

    = KONKATENAT (B3, ".", C3, ".", D3, ".", E3)

  3. Zuletzt in aufsteigender Reihenfolge sortieren.

Überprüfen Sie den Screenshot.

Bildbeschreibung hier eingeben

NB:

Rot ist die ursprüngliche IP-Adresse (in Spalte A).

Grün nach dem Anwenden von Text auf Spalte (Spalte B bis E).

Schwarz ist nach dem Anwenden von Verketten und Sortieren (Spalte F).

Der Grund ist sehr einfach. Ursprünglich lautet die IP-Adresse "Textdaten" und Excel akzeptiert kein Zellenformat, um sie in "Zahl" umzuwandeln.

Hoffe das hilft dir.

Rajesh S
quelle
4
Das ist schrecklich. Sie möchten niemals Daten aus verschiedenen Zeilen verwechseln.
MaxW
@MaxW ,, Ich verstehe nicht genau was du sagen willst !!
Rajesh S
2
Er meint, Sie hätten die ursprüngliche Spalte A in die Sortierung aufnehmen sollen, damit die IP-Adressen in jeder Zeile gleich wären.
Bandersnatch
1
Nein, ich habe nichts falsch gemacht. Die OP-Anforderung lautete, die IP-Adresse in natürlicher Reihenfolge zu sortieren (Nummer), und die Spalte A in ROT ist nicht sortiert. Spalte F hat die IP-Adresse in SCHWARZ sortiert.
Rajesh S
1
+1 Dies ist die einfachste Lösung auf der Seite. @ RajeshS vielleicht das Wort "angepasst" in "nebeneinander" in Ihrer Antwort ändern - ich dachte, Sie meinten eine der Text To ColumnSpalten dort. @MaxW, das Layout dient nur zur Demonstration. Wenn Sie möchten, dass die ursprüngliche IP sortiert wird, ignorieren Sie einfach Schritt 2. Diese massive "VALUE (TRIM (MID (SUBSTITUTE" -Formel in der akzeptierten Antwort sollte durch "Text To Columns" ersetzt werden, und der Rest der Antwort ist im Wesentlichen derselbe wie dieser.
Mcalex
9

Hier ist eine VBA-Funktion, die ich vor einiger Zeit geschrieben habe, um das gleiche Problem zu lösen. Es wird eine gepolsterte Version einer IPv4-Adresse generiert, die korrekt sortiert ist.

Function SortAddress(Address As String)                     '   format address as XXX.XXX.XXX.XXX to permit sorting

Dim FirstByte As Integer, LastByte As Integer, I As Integer

SortAddress = ""
FirstByte = 1

For I = 0 To 2                                          '   process the first three bytes

    LastByte = InStr(FirstByte, Address, ".")           '   find the dot
                                                        '   append the byte as 3 digits followed by dot
    SortAddress = SortAddress & Format(Mid(Address, FirstByte, LastByte - FirstByte), "000\.")

    FirstByte = LastByte + 1                            '   shift the start pointer

Next I

SortAddress = SortAddress & Format(Mid(Address, FirstByte), "000") ' process the last byte

End Function

Einfaches Beispiel:

Ergebnis

Ergebnis

Formeln

Formeln

Sie können nach der Spalte "Sortierbar" sortieren und diese ausblenden.

grahamj42
quelle
4
Ich möchte nur darauf hinweisen, dass die sortierbare IP-Adresse als eine andere Adresse als die ursprüngliche analysiert wird (da einige Idioten diese als oktal interpretiert haben). Verwenden Sie sie also nur zum Sortieren und behandeln Sie sie nicht als richtige IPs.
CodesInChaos
Wenn Sie vba herausziehen wollen, warum lassen Sie nicht vba die Sortierung durchführen
Richard Tingle
1
@RichardTingle 1. Es ist (ein bisschen) mehr Arbeit 2. Ich möchte die Liste möglicherweise zu verschiedenen Zeitpunkten auf verschiedene Arten sortieren
grahamj42
7

Hier ist eine Antwort, die nur eine Spalte Ihrer Tabelle benötigt und die IPv4-Adresse in eine 10er-Basis-Nummerierung umwandelt.

Da Sie Ihre Daten in Spalte "M" einfügen, beginnt dies in Zelle M2 (M1 ist die Bezeichnung). Die Verkapselung als Code führt zu einem schlimmen Durcheinander. Daher habe ich blockquote verwendet:

= INT (LINKS (M2, SUCHEN (".", M2) - 1)) * 256 ^ 3 + INT (MITTEL (M2, SUCHEN (".", M2) + 1, SUCHEN (".", M2, SUCHEN (".", M2) + 1) - FIND (".", M2) -1)) * 256 ^ 2 + INT (MID (M2, FIND (".", M2, FIND (".", M2) + 1) + 1, SUCHEN (".", M2, SUCHEN (".", M2, SUCHEN (".", M2) + 1) + 1) - SUCHEN (".", M2, SUCHEN ("." , M2) + 1) - 1) * 256 + INT (RECHTS (M2, LEN (M2) - FIND (".", M2, FIND (".", M2, FIND (".", M2) + 1) ) + 1)))

Nicht gerade die am leichtesten lesbare Formel, aber Sie können sie einfach kopieren und in Ihre Zelle einfügen (vorzugsweise N2 oder etwas anderes in derselben Zeile wie Ihre erste IP-Adresse). Die korrekte Formatierung der IP-Adresse wird vorausgesetzt, da eine Fehlerkorrektur in der Formel das Parsen durch den Menschen noch verschlimmern würde.

RudyB
quelle
3

Wenn Sie keine Formeln oder VBA verwenden möchten, verwenden Sie Power Query. (Installieren Sie in Excel 2016, Get & Transform, in Excel 2010 oder 2013 das PowerQuery-Add-In, um mitzumachen.)

  1. Bringen Sie die Tabelle in den PowerQuery-Editor.
  2. Duplizieren Sie die Spalte, indem Sie mit der rechten Maustaste auf "Spalte duplizieren" klicken.
  3. "Spalte teilen" nach Trennzeichen auf der Registerkarte "Startseite". Wählen Sie "Jedes Vorkommen des Begrenzers"
  4. Sortieren Sie jede Spalte aufsteigend. von links nach rechts.
  5. Wählen Sie die zuvor geteilten Spalten aus, klicken Sie mit der rechten Maustaste und entfernen Sie sie, schließen Sie sie und laden Sie sie.
Klick hier
quelle
3

Dies ist ein ähnlicher Einzeiler, der die Oktette in dreistellige Felder umwandelt, die eine ordnungsgemäße Sortierung ermöglichen.

10.1.0.15wird 10001000015.

=LEFT(B85, FIND(".", B85) - 1) * 1000000000
+ MID(B85, FIND("x", SUBSTITUTE(B85, ".", "x", 1)) + 1, FIND("x", SUBSTITUTE(B85, ".", "x", 2)) - FIND(".", B85) - 1) * 1000000
+ MID(B85, FIND("x", SUBSTITUTE(B85, ".", "x", 2)) + 1, FIND("x", SUBSTITUTE(B85, ".", "x", 3)) - FIND("x", SUBSTITUTE(B85, ".", "x", 2)) - 1) * 1000
+ RIGHT(B85, LEN(B85) - FIND("x", SUBSTITUTE(B85, ".", "x", 3)))
user856853
quelle
3
Damit die Sortierung funktioniert, müssen Sie auch das erste Oktett mit führenden Nullen auffüllen.
Blackwood
2

Wie in Frage gezeigt, sind Spalte M die IP-Adressen (IPv4), beginnend mit M2.

Hier ist meine Lösung, indem ich die guten Punkte aus der Antwort aller heraushole. Es wird nur 1 Hilfssäule benötigt. Wir versuchen, die IPv4-Adressen zu 012.198.043.009formatieren und sie dann zu sortieren:

  • 12.198.43.9zu 12 198 43 9, dann zu012.198.043.009

  1. Formatieren Sie IPv4-Adressen in das 012.198.043.009Format, indem Sie N2 eingeben , und geben Sie Folgendes ein:

    = TEXT( LEFT(SUBSTITUTE(M2, ".", "      "), 3    ), "000") & "."
    & TEXT(  MID(SUBSTITUTE(M2, ".", "      "), 8, 5 ), "000") & "."
    & TEXT(  MID(SUBSTITUTE(M2, ".", "      "), 15, 7), "000") & "."
    & TEXT(RIGHT(SUBSTITUTE(M2, ".", "      "), 3    ), "000")
    
  2. Nach Spalte N sortieren


Erklärung

Indem wir SUBSTITUTEden Punkt . mit 6 Leerzeichen versehen , erhalten wir Folgendes, damit sie korrekt extrahiert werden können:

                   |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===
  • Zeichen 1-3 enthält und enthält nur den ersten Teil.
  • Zeichen 8-12 enthält und enthält nur den zweiten Teil.
  • Zeichen 15-21 enthält und enthält nur den dritten Teil.
  • Ganz rechts 3 Zeichen enthält und enthält nur den vierten Teil.

Und dann extrahieren und formatieren Sie jeden Teil von TEXT(..., "000").

Wilson
quelle
2

Wenn Sie eine neuere Excel-Version unter Windows verwenden, können Sie den 32-Bit-Dezimalwert der IP-Adresse mithilfe der folgenden Formel berechnen.

=SUMPRODUCT(FILTERXML("<I><o v="""&SUBSTITUTE([@ipbase],".","""/><o v=""")&"""/></I>","//o/@v"),{16777216;65536;256;1})

Sie können dann nach dem abgeleiteten Dezimalwert sortieren. Ersetzen Sie [@ipbase]durch den Zellenort einer gültigen IP4-Adresse.

Die "FILTERXML" -Funktion funktioniert nur unter Windows, Sie haben also Pech, wenn Sie ein anderes Betriebssystem verwenden.

Cory
quelle
0

Ich habe auch einen Einzeiler, der Ihnen eine gepolsterte IP-Adresse (000.000.000.000) für die Alphasortierung gibt.

= 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