Ordenar los elementos de un array y ArrayList en VBA

Glen Alfaro 26 diciembre 2022
  1. Ordenar Array() en VBA
  2. Ordenar Arraylist() en VBA
Ordenar los elementos de un array y ArrayList en VBA

En VBA o en cualquier lenguaje de programación, la necesidad de la computadora de almacenar valores es vital para la ejecución del código. Una excelente manera de hacer esto es utilizar arrays.

Las arrays son objetos que tienen la capacidad de almacenar información. Son esenciales en la programación de computadoras, ya que le dan al programador la opción de guardar los datos que se necesitaron en la última parte de la ejecución del código.

En VBA, podemos utilizar Array() y Arraylist() para nuestras necesidades de matriz. El primero es más rápido en tiempo de ejecución y el segundo promete flexibilidad. El primero es de longitud fija mientras que el segundo es de longitud variable.

El siguiente bloque de código demostrará cómo crear y cómo usar un Array() y Arraylist().

Cree y use Array() estático:

Sub StatArrayDemo()

Dim namesArr (1 to 4) as String

namesArr(1) = "Glen"
namesArr(2) = "Jose"
namesArr(3) = "Katrina"
namesArr(4) = "Myla"

Debug.print namesArr(3)
End Sub

Salida StatArrayDemo:

Katrina

Cree y use un Array() dinámico:

Sub DynaArrayDemo()

Dim namesArr as Variant

namesArr = Array("Glen", "Jose", "Katrina", "Myla")

Debug.print namesArr(0)
End Sub

Salida DynaArrayDemo:

Glen

Creación y uso de Arraylist()

Para usar Arraylist() en VBA, debemos habilitar la biblioteca en la que se encuentra Arraylist().

Para hacer esto:

  • Abrir archivo de Excel.
  • Desde la Pestaña Desarrollador, abre el Editor Visual Basic.
  • En la barra de herramientas Tools, haz clic en References.
  • Marque la casilla de verificación mscorlib.dll.

Ya está todo listo.

En el siguiente ejemplo, el objeto Arraylist llamado ArrayValues se declaró y se inicializó y luego se agregaron los valores.

Sub ArrayListDemo()

Dim ArrayValues As ArrayList
'Create a new Arraylist Object

'Adding Values to ArrayValues Arraylist
ArrayValues. Add("Glen")
ArrayValues. Add("Jose")
ArrayValues. Add("Kartina")
ArrayValues. Add("Myla")

Debug.Print (ArrayValues(1))

End Sub

Salida ArrayListDemo:

Jose

Ordenar Array() en VBA

El bloque de código a continuación ordenará los valores ingresados ​​en la subrutina ya sea en orden numérico o en orden alfabético.

La subrutina ArraySort acepta tres parámetros. vArray donde los valores no ordenados, mientras que inLow será el límite inferior de vArray e inHi es el límite superior de vArray. El ArraySort fue probado por dos subrutinas de prueba NumberTest y LetterTest.

Public Sub ArraySort(vArray As Variant, inLow As Long, inHi As Long)

Dim arr1   As Variant
Dim tempO As Variant
Dim tempL  As Long
Dim tempH   As Long

tempL = inLow
tempH = inHi

arr1 = vArray((inLow + inHi) \ 2)

While (tempL <= tempH)
    While (vArray(tempL) < arr1 And tempL < inHi)
        tempL = tempL + 1
    Wend

    While  (arr1 < vArray(tempH) And tempH > inLow)
        tempH = tempH - 1
    Wend

    If (tempL <= tempH) Then
        tempO = vArray(tempL)
        vArray(tempL) = vArray(tempH)
        vArray(tempH) = tempO
        tempL = tempL + 1
        tempH = tempH - 1
    End If
Wend

If (inLow < tempH) Then ArraySort vArray, inLow, tempH
If (tempL < inHi) Then ArraySort vArray, tempL, inHi

End Sub

Sub NumberTest()

Dim myArr As Variant

myArr = Array(5, 7, 3, 8, 5, 3, 4, 1)

Call ArraySort(myArr, 0, UBound(myArr))

Dim i As Integer

For i = LBound(myArr) To UBound(myArr)

Debug.Print (myArr(i))
Next i

End Sub

Sub LetterTest()

Dim myArr As Variant


myArr = Array("A", "T", "O", "D", "B", "Q", "M", "L")
Call ArraySort(myArr, 0, UBound(myArr))

Dim i As Integer

For i = LBound(myArr) To UBound(myArr)

Debug.Print (myArr(i))
Next i

End Sub

Salida NumberTest:

1 
3 
3 
4 
5 
5 
7 
8 

Salida LetterTest:

A
B
D
L
M
O
Q
T

Ordenar Arraylist() en VBA

Para Arraylist, es más fácil ya que el objeto Arraylist viene con el método Sort. Por lo tanto, si necesita ordenar las cosas en un array, es mucho mejor usar Arraylist.

El siguiente bloque de código demostrará cómo ordenar los valores en Arraylist. La función Sort de Arraylist puede ordenar valores y letras.

Public Sub ArraylistSortLetters()

Dim myArr As Arraylist
Set myArr = New Arraylist

myArr.Add ("A")
myArr.Add ("T")
myArr.Add ("O")
myArr.Add ("D")
myArr.Add ("B")
myArr.Add ("Q")
myArr.Add ("M")
myArr.Add ("L")

myArr.Sort

Dim i As Integer

For i = 0 To myArr.Count - 1
   Debug.Print (myArr(i))
Next i

End Sub

Salida ArraylistSortLetters:

A
B
D
L
M
O
Q
T
Public Sub ArraylistSortNumbers()

Dim myArr As Arraylist
Set myArr = New Arraylist

myArr.Add (5)
myArr.Add (8)
myArr.Add (2)
myArr.Add (8)
myArr.Add (4)
myArr.Add (7)
myArr.Add (1)
myArr.Add (7)

myArr.Sort

Dim i As Integer

For i = 0 To myArr.Count - 1
    Debug.Print (myArr(i))
Next i

End Sub

Salida ArraylistSortNumbers:

1 
2 
4 
5 
7 
7 
8 
8 

Los dos bloques de código encima de ArraylistSortLetters y ArraylistSortNumbers ordenan los elementos de menor a mayor.

Si queremos ordenar el array de mayor a menor, podemos ordenar el array de menor a mayor y luego usar el método Reverse para cambiar.

El bloque de código a continuación demostrará la clasificación de mayor a menor utilizando el método Reverse.

Public Sub SortInHighestToLowest()

Dim myArr As Arraylist
Set myArr = New Arraylist

myArr.Add (5)
myArr.Add (8)
myArr.Add (2)
myArr.Add (8)
myArr.Add (4)
myArr.Add (7)
myArr.Add (1)
myArr.Add (7)

myArr.Sort
myArr.Reverse

Dim i As Integer

For i = 0 To myArr.Count - 1
   Debug.Print (myArr(i))
Next i

End Sub

Salida SortInHighestToLowest:

8 
8 
7 
7 
5 
4 
2 
1 

Artículo relacionado - VBA Array