Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

VBA: Ordenar una Array Multidimensional

Veremos en el post de hoy cómo conseguir ordenar, empleando una array en VBA para Excel, un rango de celdas de varias columnas.
Como punto especial veremos que sirve para cualquier dimensión de rango (número de filas y columnas) y que es configurable cuál es el campo o columna prioritaria a la hora de la ordenación.

Veamso el punto de partida y el resultado tras la ejecución de la macro:



La función definida personalizada que veremos a continuación: 'OrdenarMatrices' emplea el método de burbuja de ordenación, que ya vimos en esta entrada hace algún tiempo; si bien en esta ocasión en modo función.

Y ahora lo importante.. en un módulo estándar incluimos los siguiente procedimientos:

Function OrdenarMatrices(TempArray() As Variant, NumCol As Long, TotalCol As Long)
Dim situacion As Boolean
Dim elto As Long, col As Long
'definimos la dimensión de una matriz temporal
Dim Temp()
x = Val(TotalCol)
'la redimensionamos
ReDim Temp(1 To x)

'añadimos un bucle para pasar por todos los elementos de la matriz
Do
situacion = True
'recorremos cada elemento de la matriz de trabajo cargada
For elto = LBound(TempArray) To UBound(TempArray) - 1
'con el en sentido descendente)
If TempArray(elto, NumCol) situacion = False
'recorremos cada columna de cada elemento
For col = 1 To TotalCol
'hacemos un trasvase de datos de la matriz temporal a la cargada
Temp(col) = TempArray(elto, col)
TempArray(elto, col) = TempArray(elto + 1, col)
TempArray(elto + 1, col) = Temp(col)
Next
End If
Next
'salimos del bucle...
Loop While Not situacion

End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub Ordenamos()
Dim MiMatriz() As Variant
'cargamos la matriz con datos
MiMatriz = Range("A1:D10")
'ordenamos de menor a mayor según la tercera columna el rango anterior
Call OrdenarMatrices(MiMatriz, 3, UBound(MiMatriz, 2))

'devolvemos la matriz oredenada a la hoja de cálculo
Range("F1:I10") = MiMatriz

End Sub
Tras la ejecución de 'Ordenamos' obtenemos el resultado esperado, tal como se veía en la imagen primera....


This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here

Share the post

VBA: Ordenar una Array Multidimensional

×

Subscribe to Excel Foro: Ejercicios, Ejemplos, Soluciones, Duda

Get updates delivered right to your inbox!

Thank you for your subscription

×