Function MacroOrden(Rango As Range) As Integer
'
' -----------------------------------------------------
' Ordena un rango de una sola columna sin tocar la hoja
' Deja el resultado en el array de rangos: Celda
'
' Macro Antonio Junio de 2011
' ---------------------------
'
' Nota: Necesita una adaptación para Option Base 1
'
' -----------------------------------------------------
'
Application.ScreenUpdating = False
MacroOrden = 0 'Función correcta
'Controlamos que solo haya una columna en el rango
If Rango.Columns.Count > 1 Then
MacroOrden = 1 'Función errónea
Exit Function
End If
'Redimensionamos el array al nº de celdas + 1
ReDim Celda(Rango.Cells.Count)
'Cargamos el rango en el array
For Each c In Rango: Set Celda(x) = c: x = x + 1: Next
'Ordenamos el array
For x = 0 To UBound(Celda) - 1
For y = x + 1 To UBound(Celda) - 1
If Celda(y).Value < Celda(x).Value Then
Set Celda(UBound(Celda)) = Celda(x)
Set Celda(x) = Celda(y)
Set Celda(y) = Celda(UBound(Celda))
End If
Next
Next
'Redimensionamos el array al número de celdas
ReDim Preserve Celda(Rango.Cells.Count - 1)
'Exit Function
'Depuración
For x = 0 To UBound(Celda)
Debug.Print Celda(x).Address, Celda(x).Value
Next x
End Function[/CODE]
Saludos
Featured Replies
Archivado
Este tema está ahora archivado y está cerrado a más respuestas.
Hola:
Pues nada mas que lo que dice el título.
Ordena un rango de celdas en un array de rangos.
Saludos.
Saludos