Ordenar tabla en varias columnas

En una hoja, tengo datos (nombres, formato de texto) ordenados alfabéticamente de la A a la Z, en 17 columnas y 50 filas por columna. Voy rellenando una celda nueva con un nombre nuevo cada cierto tiempo. Cada vez que lleno las 50 filas (celdas) de una columna, empiezo una columna nueva. La primera fila de la hoja, es un encabezamiento (A1:1-50 B1:51-100, etc).

Lo que me gustaría hacer es que al añadir un nombre nuevo, se ordenaran las columnas de manera alfabética, automáticamente.

Espero haberme explicado bien y que se pueda hacer. Hasta ahora lo hago manualmente, pero cuando tengo que insertar un nombre con una de las primeras letras del abecedario, el trabajo es bastante pesado.

1 Respuesta

Respuesta
1

H o l a:

No entiendo cómo tienes los datos.

Podrías poner 3 imágenes. La primer imagen con los datos tal y como los tienes.

La segunda imagen que se vea la columna o con el nombre que estás insertando.

La tercera imagen cómo quieres que queden ordenadas las columnas.

Procura que las imágenes se vean las filas y las columnas de excel.

A ver si gráficamente se entiende

1. Esta es la tabla (las últimas 8 columnas, de un total de 17). Hay 50 filas por columna.

              

2. Inserto el nuevo nombre en la primera celda vacía.

3. Lo que busco es que, a continuación, de alguna forma, se ordenen los nombres respetando el orden alfabético y las 50 filas por columna, iniciándose una nueva columna si es necesario.

Espero que gráficamente haya quedado más clara mi intención.

Gracias.

H o l a:

Te anexo la macro para ordenar.

Dim datos As New Collection
Sub OrdenarTabla()
'Por.Dante Amor
    Set datos = Nothing
    For Each c In Range("A1").CurrentRegion.Offset(2, 0)
        If c.Value <> "" Then ordenar c.Value
    Next
    Range("A1").CurrentRegion.Offset(2, 0).ClearContents
    i = 3
    j = 1
    For Each d In datos
        Cells(i, j) = d
        i = i + 1
        If i = 53 Then i = 3: j = j + 1
    Next
    Set datos = Nothing
    MsgBox "Proceso terminado", vbInformation, "ORDENAR TABLA"
End Sub
'
Sub ordenar(c As String)
'Por.Dante Amor
    For i = 1 To datos.Count
        Select Case StrComp(datos(i), c, vbTextCompare)
            Case 0, 1: datos.Add c, Before:=i: Exit Sub
        End Select
    Next
    datos.Add c
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: OrdenarTabla
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

Muchísimas gracias por el tiempo y las molestias tomadas para realizar esta Macro.

Funciona casi perfecta. Solo hay un pequeño fallito, que no sé si se puede corregir o no: si la primera letra es una vocal acentuada, la ordena al final de la lista, después de la Z.

En todo caso, como es una pequeñez, creo que quitaré los acentos y arreglado.

Gracias de nuevo.

Hola.

Repasando con tranquilidad me he dado cuenta de otro fallo.

En la tabla inicial hay unas celdas con el texto en rojo. Tras la ordenación, esas celdas siguen en rojo, cuando, en realidad, lo que debería seguir en rojo es el valor que había en la celda (que lógicamente puede haber cambiado de celda tras la ordenación) y no la celda en si.

Esto ya no sé si es más difícil de conseguir...

Un saludo.

Y también acabo de ver que, tras la primera ordenación, las dos primeras celdas con datos (A3 y A4) han aparecido en blanco, empezando a ordenarse en A5.

H o l a:

Ya hice una prueba de los acentos y si tienes esto arbol y árbol, primero pone arbol y después árbol.

Revisa las celdas que te aparecen al principio, deben tener espacios en blanco. Presiona F2 sobre la celda y borra los espacios en blanco. Vuelve a ejecutar la macro. De cualquier forma, le hice un cambio para que considere celdas con espacios en blanco.

También actualicé la macro para poner el color del texto.

Dim datos As New Collection
Sub OrdenarTabla()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set h1 = ActiveSheet
    Set h2 = Sheets.Add
    'h2.Cells.Clear
    h1.Cells.Copy h2.[A1]
    Set datos = Nothing
    h1.Range("A1").CurrentRegion.Offset(2, 0).Font.ColorIndex = xlNone
    For Each c In h1.Range("A1").CurrentRegion.Offset(2, 0)
        If c.Value <> "" Then
            If Trim(c.Value) <> "" Then
                ordenar c.Value
            End If
        End If
    Next
    h1.Range("A1").CurrentRegion.Offset(2, 0).Clear
    i = 3
    j = 1
    For Each d In datos
        h1.Cells(i, j) = d
        i = i + 1
        If i = 53 Then i = 3: j = j + 1
    Next
    Set datos = Nothing
    '
    For Each c In h2.Range("A1").CurrentRegion.Offset(2, 0)
        elcolor = c.Font.ColorIndex
        Set b = h1.Cells.Find(c.Value, lookat:=xlWhole)
        If Not b Is Nothing Then
            b.Font.ColorIndex = elcolor
        End If
    Next
    h2.Delete
    '
    Application.ScreenUpdating = True
    MsgBox "Proceso terminado", vbInformation, "ORDENAR TABLA"
End Sub
'
Sub ordenar(c As String)
'Por.Dante Amor
    For i = 1 To datos.Count
        Select Case StrComp(datos(i), c, vbTextCompare)
            Case 0, 1: datos.Add c, Before:=i: Exit Sub
        End Select
    Next
    datos.Add c
End Sub

S a l u d o s

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas