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 EditorVisual Basic
. -
En la barra de herramientas
Tools
, haz clic enReferences
. -
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