Ordinamento della colonna Excel per indirizzo IP


17

Ho un foglio di calcolo Excel abbastanza grande (oltre 200 righe) che elenca gli elementi nella mia rete (ad esempio stampanti, server, workstation, proiettori di rete, ecc.) E una delle prime colonne è il campo Indirizzo IP, che assume la forma 192.168.x.y. Il mio problema quando provo a ordinare è che va (come esempio) da 192.168.0.85a 192.168.0.9. Quello che mi piacerebbe vedere è l'ordinamento in base ai primi 3 ottetti, quindi l'ultimo ottetto logicamente (vale a dire .1, .2, .3, ecc). È possibile? Se é cosi, come?

Risposte:


19

Come nixda menzionato nei commenti, le colonne helper lo renderanno possibile. In seguito sono disponibili due opzioni per mantenere il foglio:

  • Aggiungi tutti i nuovi IP nelle colonne dell'helper divise.
  • Ripetere la procedura Testo su colonne per nuove aggiunte.

Ecco la procedura:

  1. Seleziona la colonna IP e fai clic su Data>Text-to-Columns text-to-colonne

  2. Scegli l'opzione Delimted e fai clic su Next. Seleziona la Othercasella di controllo e inserisci un punto .. Fai clic su Avanti. scegli.  come delimitatore

  3. Mantieni tutte le colonne, tienile come Generali, fai clic sull'icona dell'intervallo per modificare la Destinationsezione. cambia dest 1

  4. Seleziona le colonne in cui desideri che appaia il nuovo testo. Premi il tasto Invio. cambia dest 2

  5. Assicurarsi che l'intervallo sia selezionato e fare clic su Data> Sort. Immettere i criteri di ordinamento. Continua ad aggiungere livelli per ogni ottetto. ordinamento

  6. Ecco il risultato finale: risultato


@nixda Sì, slow poke: P Vorrei poter anche lanciare un po 'di rappresentante a modo tuo
Canadian Luke,

Spiacente, @nixda! È illegale aggiungere anche la tua risposta?
rishimaharaj,

Bene, ha funzionato ... È ora che voi due combattiate per i 15 punti rep supplementari
canadese Luke il

7

Mi rendo conto che questo è un vecchio post, ma nell'interesse di fornire una soluzione funzionante, presento quanto segue.

Inserisci questa formula in una cella adiacente e aggiorna i riferimenti in modo che puntino alla cella contenente il tuo indirizzo IP (A1 in questo esempio). Ciò produrrà un risultato simile a 010.121.008.030, che può quindi essere ordinato (correttamente) in ordine alfabetico. Quindi imposta la larghezza della nuova colonna su zero e voilà. È ora di godersi una tazza di caffè.

=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
Adoro questo, perfetto. Una singola formula, una singola colonna "helper". Grazie.
Conti

Come per tutte le formule di Excel, potrebbe essere necessario utilizzare i punti e virgola ( ;) anziché le virgole ( ,) in base alle impostazioni internazionali del sistema.
Scott,

1
Puoi tralasciare i periodi concatenati ( …&"."&…) e ottenere un numero semplice di dodici cifre, come 010121008030, che ordinerà anche correttamente (anche se la funzione di ordinamento potrebbe generare una fastidiosa finestra di dialogo).
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

Non posso provarlo ora (non al lavoro), ma lo proverò quando arrivo al lavoro. Sembra che sarebbe più adattabile agli elenchi più lunghi, soprattutto se aggiungo semplicemente un pulsante "Resort" per eseguire questa macro
Canadian Luke,

@CanadianLuke Puoi anche creare una colonna BigIntIP. Quindi è possibile ordinare tutti gli indirizzi IP e viceversa AZ.
STTR,

Funziona benissimo! La mia unica richiesta sarebbe quella di riutilizzare le vecchie colonne quando vengono aggiunte le stampanti
canadese Luke il

@CanadianLuke Se si rinomina un soggetto "IP ott 1", la colonna verrà aggiunta a destra. E i vecchi rimangono. Questo è se hai bisogno di una storia. Ad esempio, durante la migrazione da una rete a un altro intervallo. Forse non ho capito bene la domanda ...
STTR,

0

Oltre alla risposta di John Homer, fornisco qui una formula che funziona anche nell'applicazione Numbers di Apple, poiché la TEXTfunzione non esiste. Testato anche in Google Documenti.

=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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.