¿Como ordenar alfabéticamente filas alternas?

Tengo un listado en la columna A, con el nombre de una empresa en la fila 1 y su dirección en la fila 2, la siguiente empresa en la fila 3 y su dirección en la fila 4 y así sucesivamente. Quiero poder ordenar alfabéticamente tanto por el nombre de la empresa o por la dirección por lo que los datos tendrán que ir agrupados de 2 en 2 filas.

¿Me podéis explicar como hacerlo?

1 Respuesta

Respuesta
1

H o l a:

Para ordenar los datos de esa forma hay que hacerlo con una macro.

Pon la siguiente macro en un botón para ordenar los datos por nombre:

Sub OrdenarPorNombre()
'Por.Dante Amor
    OrdenarDatos 1
End Sub

En otro botón pon la siguiente macro:

Sub OrdenarPorDireccion()
'Por.Dante Amor
    OrdenarDatos 2
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: OrdenarPorNombre
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

Sigue las instrucciones paracrear otro botón para la macro OrdenarPorDireccion


En otro módulo puedes poner esta macro:

Sub OrdenarDatos(n)
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    h2.Cells.Clear
    j = 1
    '
    For i = 1 To h1.Range("A" & Rows.Count).End(xlUp).Row Step 2
        h2.Cells(j, "A") = h1.Cells(i, "A")
        h2.Cells(j, "B") = h1.Cells(i + 1, "A")
        j = j + 1
    Next
    '
    If n = 1 Then
        With h2.Sort
            .SortFields.Clear: .SortFields.Add Key:=h2.Range("A1:A" & j)
            .SetRange h2.Range("A1:B" & j): .Header = xlGuess: .Apply
        End With
    Else
        With h2.Sort
            .SortFields.Clear: .SortFields.Add Key:=h2.Range("B1:B" & j)
            .SetRange h2.Range("A1:B" & j): .Header = xlGuess: .Apply
        End With
    End If
    '
    i = 1
    For j = 1 To h2.Range("A" & Rows.Count).End(xlUp).Row
        h1.Cells(i, "A") = h2.Cells(j, "A")
        h1.Cells(i + 1, "A") = h2.Cells(j, "B")
        i = i + 2
    Next
    '
    MsgBox "Se ordenaron los datos"
End Sub

Esta última macro no la asignes a un botón, solamente pon la macro en un módulo:

Sigue las Instrucciones para poner la macro en un módulo.

  1. Abre tu archivo de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro

Antes de ejecutar la macro, tus datos a ordenar deberán estar en la "Hoja1", crea una hoja llamada "Hoja2", esa hoja es necesaria para realizar los ordenamientos.

Si quieres que las hojas tengan otro nombre, entonces cambia en la macro los nombres que quieras en estas líneas de la macro:

    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")

Avísame cualquier duda que tengas.


H o l a: R ecuerda valorar la respuesta.

¡Gracias! Hasta hoy no había podido probarlo. Funciona perfecto, aunque me habría gustado que el "ordenamiento" conservase el formato original en una sola columna. ;-)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas