Como Ordenar una matriz alfabéticamente con VBA
En algún momento de su vida de VBA, será necesario mostrar o reordenar una matriz/lista alfabéticamente (o alfabéticamente al revés). Desafortunadamente, VBA no tiene una función para ordenar matrices automáticamente, pero con un poco de codificación podemos crear una función reutilizable que lograría algo similar.
Configurando el ejemplo
Este primer código VBA sirve para preparar el escenario. Crea una matriz, llama a la función para ordenar la matriz y luego genera la matriz ordenada. Sólo necesitas este primer fragmento de código si lo estás siguiendo como ejemplo.
Sub RunTheSortMacro()Dim i As LongDim myArray As Variant'Establezca la matrizmyArray = Array("p", "A", "G", 3, "l", "6", 10, "K", 7)'myArray variable configurada como el resultado de la función SortArrayAtoZ myArray = SortArrayAtoZ(myArray)'Envía la matriz a través de un cuadro de mensajeFor i = LBound(myArray) To UBound(myArray) MsgBox myArray(i)Next iEnd Sub
Ordenar la matriz AZ
Me gusta usar una función, en lugar de un sub, para ordenar una matriz. La función es una pieza de código reutilizable, puede formar parte de su módulo 'Core', que puede copiar en cualquier proyecto VBA. Esta función toma una matriz como variable y genera la misma matriz ordenada en orden alfabético.
Función SortArrayAtoZ(myArray As Variant)Dim i As LongDim j As LongDim Temp'Ordenar la matriz A-ZFor i = LBound(myArray) To UBound(myArray) - 1 For j = i + 1 To UBound(myArray) If UCase(myArray) (i)) UCase(myArray(j)) Then Temp = myArray(j) myArray(j) = myArray(i) myArray(i) = Temp End If Next jNext iSortArrayAtoZ = myArrayEnd Función
Ordenar la matriz ZA
La función inversa para ordenar la matriz ZA
Función SortArrayZtoA(myArray As Variant)Dim i As LongDim j As LongDim Temp'Ordenar la matriz Z-AFor i = LBound(myArray) To UBound(myArray) - 1 For j = i + 1 To UBound(myArray) If UCase(myArray) (i)) UCase(myArray(j)) Then Temp = myArray(j) myArray(j) = myArray(i) myArray(i) = Temp End If Next jNext iSortArrayZtoA = myArrayEnd Función
Deja una respuesta