Ordenar columna de Excel por dirección IP


17

Tengo una hoja de cálculo Excel bastante grande (más de 200 filas) que enumera elementos en mi red (es decir, impresoras, servidores, estaciones de trabajo, proyectores de red, etc.), y una de las primeras columnas es el campo Dirección IP, que toma la forma 192.168.x.y. Mi problema cuando trato de ordenarlo es que va (como ejemplo) de 192.168.0.85a 192.168.0.9. Lo que me gustaría ver es que la clasificación basada en los 3 primeros octetos, entonces lógicamente el último octeto (es decir .1, .2, .3, etc). es posible? ¿Si es así, cómo?

Respuestas:


19

Como nixda mencionó en los comentarios, las columnas auxiliares lo harán posible. Tiene dos opciones para mantener la hoja después:

  • Agregue todas las IP nuevas en las columnas auxiliares divididas.
  • Repita el procedimiento de Texto a columnas para nuevas adiciones.

Aquí está el procedimiento:

  1. Seleccione su columna de IP y haga clic en Data>Text-to-Columns texto a columnas

  2. Elija la opción Delimitada y haga clic en Siguiente. Marque la Othercasilla de verificación e ingrese un punto .. Haga clic en Siguiente. escoger .  como delimitador

  3. Mantenga todas las columnas, manténgalas como Generales, haga clic en el icono de rango para editar la Destinationsección. cambiar dest 1

  4. Seleccione las columnas donde desea que aparezca el nuevo texto. Presiona la tecla Enter. cambiar dest 2

  5. Asegúrese de que su rango esté seleccionado y haga clic en Data> Sort. Ingrese los criterios de clasificación. Sigue agregando niveles para cada octeto. clasificación

  6. Aquí está el resultado final: resultado


@nixda Sí, empuje lento: P Ojalá pudiera arrojarte algo de reputación también
Canadian Luke

Lo siento, @nixda! ¿Es ilegal para usted agregar su respuesta también?
rishimaharaj

Bueno, funcionó ... Es hora de que ustedes dos peleen por los 15 puntos extra de repeticiones
Canadian Luke

7

Me doy cuenta de que esta es una publicación antigua, pero en interés de proporcionar una solución de trabajo, presento lo siguiente.

Simplemente coloque esta fórmula en una celda adyacente y actualice las referencias para que apunten a la celda que contiene su dirección IP (A1 en este ejemplo). Esto producirá un resultado similar a 010.121.008.030, que luego se puede ordenar (correctamente) alfabéticamente. Luego establezca el ancho de la nueva columna en cero y listo. Es hora de disfrutar de una taza 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
Amo esto, perfecto. Una fórmula única, una columna individual "auxiliar". Gracias.
Earls

Al igual que con todas las fórmulas de Excel, es posible que necesite usar punto y coma ( ;) en lugar de comas ( ,) según la configuración regional de su sistema.
Scott

1
Puede omitir los puntos concatenados ( …&"."&…) y obtener un número simple de doce dígitos, como 010121008030, que también se ordenará correctamente (aunque la función de clasificación podría arrojarle un cuadro de diálogo molesto).
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

No puedo probar eso en este momento (no en el trabajo), pero lo intentaré cuando llegue al trabajo. Parece que sería más adaptable a listas más largas, especialmente si solo agrego un botón 'Resort' para ejecutar esta macro
Canadian Luke

@CanadianLuke También puede crear una columna BigIntIP. Luego puede ordenar todas las direcciones IP y viceversa AZ.
STTR

¡Esto funciona muy bien! Mi única solicitud sería que reutilice las columnas antiguas a medida que se agregan impresoras
Canadian Luke

@CanadianLuke Si cambia el nombre de un asunto "IP oct 1", la columna se agregará a la derecha. Y los viejos permanecen. Esto es si necesitas una historia. Por ejemplo, al migrar de una red a otro rango. Tal vez no entendí bien la pregunta ...
STTR

0

Además de la respuesta de John Homer, aquí proporciono una fórmula que también funciona en la aplicación Numbers de Apple, ya que la TEXTfunción no existe allí. También probado en 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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.