Esta es la contestación más correcta que te podemos aportar, sin embargo estúdiala pausadamente y valora si es compatible a tu proyecto.
Solución:
Como se habrá dado cuenta, sus direcciones IP se tratan como texto y no como números. Se ordenan como texto, lo que significa que las direcciones que comienzan con “162” aparecerán antes que las direcciones que comiencen con “20”. (porque el caracter “1” viene antes que el caracter “2”.
Puede usar la fórmula provista en esta respuesta: https://stackoverflow.com/a/31615838/4424957 para dividir la dirección IP en sus partes.
Si sus direcciones IP están en las columnas A, agregue las columnas BE como se muestra a continuación.
Introduce la fórmula
=VALUE(TRIM(MID(SUBSTITUTE($A2,".",REPT(" ",999)),(B$1)*999-998,999)))
en la celda B2 y cópielo en las columnas BE en todas las filas para obtener las cuatro partes de cada dirección IP. Ahora ordene todo el rango por las columnas B a E (en ese orden) como se muestra a continuación:
Si no desea ver las columnas auxiliares (BE), puede ocultarlas.
La solución de 3 pasos más fácil que puedo sugerirle es…
-
Seleccione la columna de dirección IP, aplique Texto a columna mando.
-
En la columna adyacente escriba esta fórmula
=CONCATENAR(B3,”.”,C3,”.”,D3,”.”,E3)
-
Finalmente ordenar en orden ascendente.
Compruebe la captura de pantalla.
NÓTESE BIEN:
rojo es la dirección IP original (en la columna A).
Verde después de aplicar Texto a la columna (Columna B a E).
Negro es Después de aplicar Concatenar y Ordenar (Columna F).
La razón es muy simple, originalmente la dirección IP es Datos de texto y Excel no acepta ningún Formato de celda para convertirlo en Número.
Espero que esto te ayude.
Aquí hay una función de VBA que escribí hace algún tiempo para resolver el mismo problema. Genera una versión rellenada de una dirección IPv4 que se ordena correctamente.
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
Ejemplo sencillo:
Resultado
fórmulas
Puede ordenar por la columna ‘Ordenable’ y ocultarla.
Si te gusta este mundo, puedes dejar una sección acerca de qué le añadirías a este escrito.