Ordenar de forma alfabética celdas obviando los 0

Tengo una macro que realiza el ordenado de forma alfabética.
Todo va bien pero cuando lo ordena las celdas que tienen cero las coloca arriba cosa que debería ir arriba.
Los nombre hoja afiliación.
Aquí les dejo el archivo:

https://drive.google.com/file/d/1wbIAF-uv-FR2F5gvxOOfg4F096OMG1f4/view

2 respuestas

Respuesta
1

Las celdas combinadas no permiten que la herramienta "Ordenar" trabaje eficientemente y no es la única herramienta del Excel a la que dicho tipo de celdas le ocasiona problemas. Mi sugerencia, en general, es que no se use la combinación de celdas en aquellas en donde se desea hacer algo tipo ordenar o usar tablas dinámicas o etc. Sé que por motivos estéticos muchas personas consideran que es bueno usarlas, pero en todo caso que sea en celdas en donde, además de agregar texto, no se va ahacer nada más. Ojo, lo que afirmo es válido para la herramienta propiamente dicha o para su uso a través de VBA (macros).

Salu2

Abraham Valencia

Creo q la pregunta la planteé mal, voy de nuevo:

Tengo una macro que realiza el ordenado de forma alfabética.
Todo va bien pero cuando lo ordena las celdas que están en blanco las coloca arriba (primero) cosa que debería ir arriba primero los nombres y las celdas vacías abajo.
Los nombre los jaló de hoja afiliación.
Aquí les dejo el archivo:

https://drive.google.com/file/d/1wbIAF-uv-FR2F5gvxOOfg4F096OMG1f4/view

Creo que la pregunta la planteé mal, voy de nuevo:

Tengo una macro que realiza el ordenado de forma alfabética.
Todo va bien pero cuando lo ordena las celdas que están en blanco las coloca arriba (primero) cosa que debería ir arriba primero los nombres y las celdas vacías abajo.
Los nombre los jaló de hoja afiliación.

Aja, te entendí mejor, pensé inicialmente que era algún problema generado por las celdas combinadas.

Vas a tener un pequeño inconveniente en ese sentido. Para el Excel primero son los números y los espacios en blanco antes de las letras. La secuencia del Orden para Excel es la siguiente:

0 1 2 3 4 5 6 7 8 9 (space) ! " # $ % & ( ) * , . / : ; ? @ [ \ ] ^ _ ` { | } ~ + < = > A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

¿Qué hacer en tu caso? Solo se me ocurre lo siguiente: Ordenar primero de forma descendente, de esa forma los resultados "en blanco" de tus fórmulas quedarán en la parte inferior.  Una vez hecho eso, redefinir el rango a ordenar, es decir, ya no tomar todo el que usas actualmente sino solo las filas que quedaron en la parte superior. Podrías recorrer con algún bucle hasta encontrar la primera fila vacía mediante un "If":

If Rango = "" Then

Encontrando esa celda ya sabrás que la inmediata superior es la última del rango a ordenar y listo.

Abraham Valencia

Respuesta
1

Usa esta macro, solo ordena las filas que tengan datos

Sub ordenar_alumnos()
Set datos = Range("a7").CurrentRegion
With datos
    filas = .Rows.Count: col = .Columns.Count
    Set datos = .Rows(11).Resize(filas - 10, col - 3)
    cuenta = WorksheetFunction.CountA(.Columns(2))
    Set datos = .Resize(cuenta)
End With
pregunta = MsgBox("Deseas ordenar de forma ASCENDENTE la lista de estudiantes...", vbQuestion + vbYesNoCancel, "Centralizador de notas v5.2")
    Select Case pregunta
        Case vbYes: intOrder = xlAscending
        'Case vbNo: intOrder = xlDescending
        Case vbCancel: Exit Sub
        Case Else: Exit Sub
    End Select
    With Worksheets("AFILIACIÓN")
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range(.Columns(2).Address), SortOn:=xlSortNormal, Order:=intOrder, DataOption:=xlSortNormal
        With .Sort
            .SetRange Worksheets("AFILIACIÓN").Range(datos.Address)
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas