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:
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 < ordenamos de menor a mayor o ascendente (con > en sentido descendente) If TempArray(elto, NumCol) < TempArray(elto + 1, NumCol) Then 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 SubTras la ejecución de 'Ordenamos' obtenemos el resultado esperado, tal como se veía en la imagen primera....
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.