web-dev-qa-db-fra.com

Comment obtenir des cellules dans Excel contenant des adresses IP pour trier correctement?

Je travaille actuellement avec une grande liste d'adresses IP (des milliers).

Cependant, lorsque je trie la colonne contenant les adresses IP, leur tri n'est pas intuitif ou facile à suivre.

Par exemple, si je saisis les adresses IP comme suit:

 enter image description here

Et puis si je trie par ordre croissant, j'obtiens ceci:

 enter image description here

Est-il possible pour moi de formater les cellules de sorte que, par exemple, une adresse IP de 17.255.253.65 apparaisse après 1.128.96.254 et avant 103.236.162.56 lorsqu’il est trié par ordre croissant ?

Sinon, y a-t-il un autre moyen pour moi d'atteindre ce but ultime?

34
Monomeeth

Comme vous l'avez peut-être compris, vos adresses IP sont traitées sous forme de texte et non de chiffres. Ils sont triés sous forme de texte, ce qui signifie que les adresses commençant par "162" viendront avant celles commençant par "20". (parce que le caractère "1" vient avant le caractère "2".

Vous pouvez utiliser la formule fournie dans cette réponse: https://stackoverflow.com/a/31615838/4424957 pour scinder l'adresse IP en ses parties.

Si vos adresses IP figurent dans les colonnes A, ajoutez les colonnes B à E comme indiqué ci-dessous.

 enter image description here

Entrez la formule

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

dans la cellule B2 et copiez-le dans les colonnes B-E de toutes les lignes pour obtenir les quatre parties de chaque adresse IP. Maintenant, triez l’ensemble des colonnes B à E (dans cet ordre) comme indiqué ci-dessous:

 enter image description here

Si vous ne voulez pas voir les colonnes d'assistance (B-E), vous pouvez les masquer.

42
Blackwood

_ {Le plus simple, Solution en 3 étapes, je peux vous suggérer, ,} _

  1. Sélectionnez la colonne d'adresse IP, appliquez Texte à la colonne commande.

  2. Dans la colonne adjacente, écrivez cette formule

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

  3. Enfin, triez par ordre croissant.

Vérifiez la capture d'écran.

 enter image description here

NB:

Rouge est l'adresse IP d'origine (dans la colonne A).

Vert après application du texte à la colonne (colonnes B à E).

Noir après concaténation et tri appliqués (colonne F).

_ {La raison en est très simple à l'origine, l'adresse IP est du texte et Excel ne permet à aucun format de cellule de le transformer en nombre.

J'espère que cela vous aidera.

10
Rajesh S

Voici une fonction VBA que j'ai écrite il y a quelque temps pour résoudre le même problème. Il génère une version complétée d'une adresse IPv4 qui trie correctement.

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

Exemple simple:

Résultat

 Result

Formules

 Formulas

Vous pouvez trier par la colonne 'Triable' et le cacher.

9
grahamj42

Voici une réponse qui ne prend qu'une colonne de votre tableau et convertit l'adresse IPv4 en numérotation de base 10.

Puisque vous mettez vos données dans la colonne "M", cela commence dans la cellule M2 (M1 étant l'étiquette). En l'encapsulant sous forme de code, on a un désordre terrible, alors j'ai utilisé blockquote:

= INT (LEFT (M2, FIND (".", M2) - 1)) * 256 ^ 3 + INT (MOYEN (M2, FIND (".", M2) + 1, FIND (".", M2, FIND (".", M2) + 1) - FIND (".", M2) -1)) * 256 ^ 2 + INT (MOYEN (M2, FIND (".", M2), FIND (".", M2) + 1) + 1, FIND (".", M2, FIND (".", M2, FIND (".", M2) + 1) + 1) - FIND (".", M2, FIND ("." , M2) + 1) - 1)) * 256 + INT (DROITE (M2, LEN (M2) - FIND (".", M2, FIND (".", M2, FIND (".", M2) + 1 ) + 1)))

Ce n’est pas exactement la formule la plus lisible, mais vous pouvez simplement copier et coller dans votre cellule (de préférence N2 ou autre chose dans la même ligne que votre première adresse IP). Cela suppose un formatage correct de l'adresse IP, car une correction d'erreur dans la formule aggraverait encore les choses pour l'analyse syntaxique.

6
RudyB

Le est une doublure similaire qui transforme les octets en champs de 3 chiffres qui permet un tri correct.

10.1.0.15 devient 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)))
3
user856853

Si vous ne souhaitez pas utiliser de formules ou VBA, utilisez Power Query. (Dans Excel 2016, Get & Transform, dans Excel 2010 ou 2013, installez le complément PowerQuery à suivre).

  1. Introduisez la table dans l'éditeur PowerQuery.
  2. Dupliquez la colonne en cliquant avec le bouton droit de la souris sur "Colonne en double"
  3. "Fractionner la colonne" par délimiteur, dans l'onglet Accueil. Sélectionnez "Chaque occurrence du délimiteur"
  4. Trier chaque colonne Asc. de gauche à droite.
  5. Sélectionnez les colonnes précédemment divisées, faites un clic droit et supprimez-les, fermez-les et chargez-les.
3
click here

Comme indiqué dans la question, la colonne M sont les adresses IP (IPv4), en partant de M2.

En obtenant les bons points de la réponse de chacun, voici ma solution. Une seule colonne d'assistance est nécessaire. Nous essayons de formater les adresses IPv4 en 012.198.043.009 format puis les trier:

  • 12.198.43.9 À 12 198 43 9, PUIS À 012.198.043.009

  1. Formatez les adresses IPv4 au format 012.198.043.009 en entrant dans N2 et remplissez-le vers le bas:

    = 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. Tri par colonne N


Explication

En SUBSTITUTEing le point . avec 6 espaces , nous obtenons ce qui suit pour qu’ils puissent être extraits correctement:

                   |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===
  • Le caractère 1-3 contient et ne contient que la première partie.
  • Le caractère 8-12 contient et ne contient que la deuxième partie.
  • Le caractère 15-21 contient et ne contient que la troisième partie.
  • Les 3 caractères les plus à droite contiennent et ne contiennent que la quatrième partie.

Ensuite, extrayez et formatez chaque partie par TEXT(..., "000").

2
wilson