Tri de la colonne Excel par adresse IP


17

J'ai une feuille de calcul Excel assez grande (plus de 200 lignes) qui répertorie les éléments de mon réseau (imprimantes, serveurs, stations de travail, projecteurs réseau, etc.), et l'une des premières colonnes est le champ Adresse IP, qui prend la forme 192.168.x.y. Mon problème lorsque j'essaie de le trier est qu'il va (à titre d'exemple) de 192.168.0.85à 192.168.0.9. Ce que je voudrais voir est - il basé sur le tri des 3 premiers octets, le dernier octet logique (c. -à .1, .2, .3, etc.). Est-ce possible? Si c'est le cas, comment?

Réponses:


19

Comme nixda l'a mentionné dans les commentaires, les colonnes d'aide rendront cela possible. Vous disposez de deux options pour gérer la feuille par la suite:

  • Ajoutez toutes les nouvelles adresses IP dans les colonnes d'assistance fractionnée.
  • Répétez la procédure de texte en colonnes pour les nouveaux ajouts.

Voici la procédure:

  1. Sélectionnez votre colonne IP et cliquez sur Data>Text-to-Columns texte en colonnes

  2. Choisissez l'option Délimité et cliquez sur Suivant. Cochez la Othercase et entrez une période .. Cliquez sur Suivant. choisissez.  comme délimiteur

  3. Conservez toutes les colonnes, conservez-les comme Général, cliquez sur l'icône de plage pour modifier la Destinationsection. changer dest 1

  4. Sélectionnez les colonnes où vous souhaitez que le nouveau texte apparaisse. Appuyez sur la touche Entrée. changer dest 2

  5. Assurez-vous que votre plage est sélectionnée et cliquez sur Data> Sort. Saisissez les critères de tri. Continuez à ajouter des niveaux pour chaque octet. tri

  6. Voici le résultat final: résultat


@nixda Yea, slow poke: P Souhaite que je puisse aussi lancer un représentant
Canadian Luke

Désolé, @nixda! Est-il illégal pour vous d'ajouter également votre réponse?
rishimaharaj

Eh bien, cela a fonctionné ... Il est temps pour vous deux de vous battre pour les 15 points de répétition supplémentaires
Canadien Luke

7

Je me rends compte que c'est un ancien poste, mais dans l'intérêt de fournir une solution de travail, je présente ce qui suit.

Mettez simplement cette formule dans une cellule adjacente et mettez à jour les références pour pointer vers la cellule contenant votre adresse IP (A1 dans cet exemple). Cela produira un résultat similaire à 010.121.008.030, qui peut ensuite être trié (correctement) par ordre alphabétique. Ensuite, définissez la largeur de la nouvelle colonne sur zéro et le tour est joué. Il est temps de déguster une tasse de café.

=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")

2
J'adore ça, parfait. Une seule formule, une seule colonne "d'aide". Merci.
Earls

Comme avec toutes les formules Excel, vous devrez peut-être utiliser des points-virgules ( ;) au lieu de virgules ( ,) en fonction des paramètres régionaux de votre système.
Scott

1
Vous pouvez laisser de côté les points concaténés ( …&"."&…) et obtenir un nombre simple à douze chiffres, comme 010121008030, qui triera également correctement (bien que la fonction de tri puisse vous lancer une boîte de dialogue ennuyeuse).
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

Je ne peux pas tester ça en ce moment (pas au travail), mais je vais l'essayer quand j'arriverai au travail. On dirait qu'il serait plus adaptable à des listes plus longues, surtout si j'ajoute juste un bouton 'Resort' pour exécuter cette macro
Canadian Luke

@CanadianLuke Vous pouvez également créer une colonne BigIntIP. Ensuite, vous pouvez trier toutes les adresses IP et vice versa AZ.
STTR

Cela fonctionne très bien! Ma seule demande serait de réutiliser les anciennes colonnes lors de l'ajout d'imprimantes
Canadian Luke

@CanadianLuke Si vous renommez un sujet "IP oct 1", la colonne sera ajoutée à droite. Et les vieux restent. C'est si vous avez besoin d'une histoire. Par exemple, lors de la migration d'un réseau vers une autre plage. Peut-être que je n'ai pas bien compris la question ...
STTR

0

En plus de la réponse de John Homer, je fournis ici une formule qui fonctionne également dans l'application Numbers d'Apple, car la TEXTfonction n'existe pas là-bas. Également testé dans Google Docs.

=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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.