it-swarm-eu.dev

Come posso ottenere celle in Excel che contengono indirizzi IP per ordinare correttamente?

Attualmente sto lavorando con una lunga lista di indirizzi IP (migliaia di loro).

Tuttavia, quando ordino la colonna contenente gli indirizzi IP, non ordinano in modo intuitivo o facile da seguire.

Ad esempio, se inserisco gli indirizzi IP come segue:

 enter image description here

E poi se ordino in ordine crescente ottengo questo:

 enter image description here

C'è un modo per me di formattare le celle in modo che, ad esempio, un indirizzo IP di 17.255.253.65 appaia after 1.128.96.254 e before 103.236.162.56 se ordinato in ordine ascendente ?

In caso contrario, c'è un altro modo per me per raggiungere questo obiettivo finale?

34
Monomeeth

Come avrai capito, i tuoi indirizzi IP sono trattati come testo e non come numeri. Vengono ordinati come testo, il che significa che gli indirizzi che iniziano con "162" verranno prima degli indirizzi che iniziano con "20." (perché il carattere "1" viene prima del carattere "2".

È possibile utilizzare la formula fornita in questa risposta: https://stackoverflow.com/a/31615838/4424957 per dividere l'indirizzo IP nelle sue parti.

Se i tuoi indirizzi IP sono nelle colonne A, aggiungi le colonne B-E come mostrato di seguito.

 enter image description here

Inserisci la formula

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

nella cella B2 e copiarlo nelle colonne B-E in tutte le righe per ottenere le quattro parti di ciascun indirizzo IP. Ora ordina l'intero intervallo per le colonne da B a E (in questo ordine) come mostrato di seguito:

 enter image description here

Se non vuoi vedere le colonne helper (B-E), puoi nasconderle.

42
Blackwood

La soluzione più semplice, in 3 passaggi, posso suggerirti di essere ,

  1. Seleziona la colonna Indirizzo IP, applica Testo su colonna comando.

  2. Nella colonna adiacente scrivi questa formula

    = CONCATENA (B3, "", C3, "", D3, "", E3)

  3. Infine Ordina in ordine crescente.

Controlla la schermata.

 enter image description here

NB:

Rosso è l'indirizzo IP originale (nella colonna A).

Verde dopo applicato Testo a Colonna (Colonna B in E).

Nero is Dopo l'applicazione Concatena e ordinamento (colonna F).

La ragione è molto semplice in origine l'indirizzo IP è Dati di testo ed Excel non accetta alcun Formato cella per trasformarlo in Numero.

Spero che questo ti aiuti.

10
Rajesh S

Ecco una funzione VBA che ho scritto qualche tempo fa per risolvere lo stesso problema. Genera una versione imbottita di un indirizzo IPv4 che ordina correttamente.

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

Esempio semplice:

Risultato

 Result

Formule

 Formulas

Puoi ordinare secondo la colonna "Ordinabile" e nasconderlo.

9
grahamj42

Ecco una risposta che richiederà solo 1 colonna della tabella e converte l'indirizzo IPv4 nella numerazione di base 10.

Dato che stai mettendo i tuoi dati nella colonna "M", questo inizia nella cella M2 (M1 è l'etichetta). Incapsularlo come codice dà un pasticcio terribile, quindi ho usato blockquote:

= INT (SINISTRA (M2, TROVA (".", M2) - 1)) * 256 ^ 3 + INT (MID (M2, TROVA (".", M2) + 1, TROVA (".", M2, TROVA (".", M2) + 1) - TROVA (".", M2) -1)) * 256 ^ 2 + INT (MID (M2, TROVA (".", M2, TROVA (".", M2) + 1) + 1, TROVA (".", M2, TROVA (".", M2, TROVA (".", M2) + 1) + 1) - TROVA (".", M2, TROVA ("." , M2) + 1) - 1)) * 256 + INT (RIGHT (M2, LEN (M2) - TROVA (".", M2, TROVA (".", M2, TROVA (".", M2) + 1 ) + 1)))

Non è esattamente la formula più facilmente leggibile, ma puoi semplicemente copiare e incollare nella tua cella (preferibilmente N2 o qualcos'altro nella stessa riga del tuo primo indirizzo IP). Presuppone una corretta formattazione dell'indirizzo IP poiché la correzione dell'errore nella formula lo renderebbe ancora peggiore per l'analisi umana.

6
RudyB

Si tratta di un rivestimento simile che trasforma gli ottetti in campi a 3 cifre che consentono una corretta selezione.

10.1.0.15 diventa 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

Se non si desidera utilizzare le formule o VBA, utilizzare Power Query. (In Excel 2016, Ottieni e trasforma, in Excel 2010 o 2013 installare il componente aggiuntivo PowerQuery da seguire).

  1. Porta la tabella nell'editor PowerQuery.
  2. Duplica la colonna facendo clic con il pulsante destro del mouse su "Duplica colonna"
  3. "Dividi colonna" dal delimitatore, nella scheda Home. Seleziona "Ogni occorrenza del delimitatore"
  4. Ordina ogni colonna Asc. da sinistra a destra.
  5. Seleziona le colonne divise in precedenza, fai clic con il pulsante destro del mouse e rimuovi, chiudi e carica.
3
click here

Come mostrato in questione, colonna M sono gli indirizzi IP (IPv4), a partire da M2.

Ottenendo i punti positivi dalla risposta di tutti, ecco la mia soluzione. È necessaria solo una colonna helper. Proviamo a formattare gli indirizzi IPv4 nel formato 012.198.043.009e poi ordinarli:

  • 12.198.43.9 A 12 198 43 9, QUINDI A 012.198.043.009

  1. Formattare gli indirizzi IPv4 nel formato 012.198.043.009 inserendo in N2 , e riempire verso il basso:

    = 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. Ordina per colonna N


Spiegazione

Con SUBSTITUTEing il punto . con 6 spazi , otteniamo quanto segue, in modo che possano essere estratti correttamente:

                   |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===
  • Il carattere 1-3 contiene e contiene solo la prima parte.
  • Il carattere 8-12 contiene e contiene solo la seconda parte.
  • Il carattere 15-21 contiene e contiene solo la terza parte.
  • L'estrema destra contiene 3 caratteri e contiene solo la quarta parte.

E poi, estrai e formatta ogni parte con TEXT(..., "000").

2
wilson