VBA – Rellenar Array con Valores Únicos de una Columna
Este tutorial le enseñará cómo rellenar un array con valores únicos de una columna en VBA.
Rellenar un Array con Valores Únicos de una Columna
Tomar una lista de valores de una hoja de Excel en un Array es cuestión de hacer un bucle a través de las filas en Excel y rellenar el array.
Considere la siguiente lista de clientes en una hoja de Excel.
Usando un bucle, podríamos rellenar un Array en VBA. Sin embargo, un bucle estándar hará un bucle a través de cada fila, incluyendo filas duplicadas y terminará con valores duplicados en su matriz.
La solución es hacer un bucle a través de las celdas y rellenar un objeto Collection con los valores, ya que un objeto Collection no permite duplicados. A continuación, puede utilizar ese objeto de colección para rellenar su matriz.
Sub RellenarArrayValoresUnicos()
Dim StrCustomers() As String
Dim Col As New Collection
Dim valCell As String
Dim i As Integer
Dim n As Integer
'contar las filas del intervalo
n = Range("A1", Range("A1").End(xlDown)).Rows.Count
'Rellenar la colección temporal
On Error Resume Next
For i = 0 To n
valCell = Range("A1").Offset(i, 0).Value
Col.Add valCell, valCell
Next i
Err.Clear
On Error GoTo 0
'Redimensionar n
n = Col.Count
'Volver a declarar array
ReDim StrCustomers(1 To n)
'Rellenar el array recorriendo la colección
For i = 1 To Col.Count
StrCustomers(i) = Col(i)
Next i
Debug.Print Join(StrCustomers(), vbCrLf)
End Sub
Función – Rellenar Array con Valores Únicos
El ejemplo anterior mostraba un procedimiento que realizaría las acciones deseadas. Pero en lugar de eso, usted podría preferir una Función portable para realizar la tarea:
Function CrearListaUnica(nStart As Long, nEnd As Long) As Variant
Dim Col As New Collection
Dim arrTemp() As String
Dim valCell As String
Dim i As Integer
'Rellenar la colección temporal
On Error Resume Next
For i = 0 To nEnd
valCell = Range("A" & nStart).Offset(i, 0).Value
Col.Add valCell, valCell
Next i
Err.Clear
On Error GoTo 0
'Redimensionar n
nEnd = Col.Count
'Volver a declarar array
ReDim arrTemp(1 To nEnd)
'Rellenar el array temporal mediante un bucle a través de la colección
For i = 1 To Col.Count
arrTemp(i) = Col(i)
Next i
'devolver el array temporal al resultado de la función
CrearListaUnica = arrTemp()
End Function
Para usar la Función, necesitará llamarla desde un Sub Procedimiento:
Sub RellenarArray()
Dim StrCustomers() As String
Dim strCol As Collection
Dim n As Long
'contar las filas del rango
n = Range("A1", Range("A1").End(xlDown)).Rows.Count
'ejecutar la función para crear una matriz de valores únicos
StrCustomers() = CrearListaUnica(1, n)
End Sub