Macros para ordenar rango de números, tomando en cuenta celdas vacías

Quiero ordenar una tabla de datos en excel de manera ascendente para el cual tengo el siguiente código que alguien amablemente compartió por aquí.
ActiveWorkbook. Worksheets("Hoja1"). Sort. SortFields. Clear
ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add Key:=Range("I1:I3"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Hoja1").Sort
.SetRange Range("A1:J3")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Tengo algo asi, 3030, 0 y 248 por lo que cuando hace el acomodo en manera de columna me queda así
0, 248, 3030 que es exactamente lo que quiero, el problema es que cuando tengo una celda vacía, a esta la manda al final es decir, si tengo 248, " ", 3030, al aplicar la macro; se ordena de la siguiente manera. 248, 3030 y " " lo cual no quiero.
Quisiera que quedase " ", 248 y 3030. (La casilla vacía no debe tomar el valor de cero, por algunas condiciones que debo cumplir, sólo quiero que sea celda vacía)
¿Alguna idea?

1 Respuesta

Respuesta
2

H o   l a  : Te anexo la macro actualizada.

Lo que hace es cambiar los vacíos por ceros, ordena y después cambiar los ceros por vacíos.

Cambia en la macro en esta línea u = 3, el número 3 por la última fila con números que quieras ordenar, o bien, si quieres que la macro obtenga el último número de fila con números, sustituye la línea por esta:

u = Range("I" & Rows.Count).End(xlUp).Row

La macro

Sub ordenar()
'Act.Por.Dante Amor
    u = 3
    For i = 1 To u
        If Cells(i, "I") = "" Then
            Cells(i, "I") = 0
        End If
    Next
    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("I1:I" & u), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("A1:J" & u)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    For i = 1 To u
        If Cells(i, "I") = 0 Then
            Cells(i, "I") = ""
        End If
    Next
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Hola ¡Gracias! 

Siento responder tan tarde pero no había tenido tiempo para checarle.


Sú código me ha servido mucho, era lo que necesitaba, sólo cambié la parte en donde cambiaba el número a cero, en lugar de eso lo puse a -1, ya que requería que también tomase el cero en cuenta.
Porque en mi tabla habían ceros y al ejecutar la macro, se borraban.
¡Pero todo excelente!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas