Este tutorial le enseñará cómo completar una matriz con valores únicos de una columna en VBA.
Llene la matriz con valores únicos de la columna
Llevar una lista de valores de una hoja de Excel a una matriz es una cuestión de recorrer las filas en Excel y completar la matriz.
Considere la siguiente lista de clientes en una hoja de Excel.
Usando un bucle, podríamos poblar una matriz en VBA. Sin embargo, un bucle estándar recorrerá cada fila, incluidas las filas duplicadas, y terminará con valores duplicados en su matriz.
La solución para recorrer las celdas y completar un objeto Colección con los valores como un objeto de colección no permitirá duplicados. Luego puede usar ese objeto de colección para completar su matriz.
1234567891011121314151617181920212223242526 | Sub PopulateUniqueArray ()Dim StrCustomers () como cadenaDim Col como nueva colecciónDim valCell como cadenaDim i como enteroDim n como entero'cuenta las filas en el rangon = Rango ("A1", Rango ("A1"). Fin (xlDown)). Rows.Count'Rellenar colección temporalEn caso de error, reanudar siguientePara i = 0 A nvalCell = Rango ("A1"). Desplazamiento (i, 0) .ValorCol.Añadir valCell, valCellSiguiente yoErr.ClearEn caso de error, vaya a 0'Cambiar el tamaño nn = Cuenta Col'Reclamar matrizReDim StrCustomers (1 an)'Rellenar Array recorriendo la colecciónPara i = 1 al recuento col.StrCustomers (i) = Col (i)Siguiente yoDebug.Print Join (StrCustomers (), vbCrLf)End Sub |
Rellenar matriz con valores únicos - Función
El ejemplo anterior mostró un procedimiento que realizaría las acciones deseadas. Pero en su lugar, es posible que prefiera una función portátil para realizar la tarea:
123456789101112131415161718192021222324 | Función CreateUniqueList (nStart as Long, nEnd as long) como VariantDim Col como nueva colecciónOscuro arrTemp() Como CuerdaDim valCell como cadenaDim i como entero'Rellenar colección temporalEn caso de error, reanudar siguientePara i = 0 para nEndvalCell = Rango ("A" & nStart) .Offset (i, 0) .ValueCol.Añadir valCell, valCellSiguiente yoErr.ClearEn caso de error, vaya a 0'Cambiar el tamaño nnEnd = Cuenta Col'Reclamar matrizReDim arrTemp(1 para terminar)'Llene la matriz temporal recorriendo la colecciónPara i = 1 al recuento col.arrTemp(i) = Col (i)Siguiente yo'devuelve la matriz temporal al resultado de la funciónCreateUniqueList = arrTemp()Función final |
Para usar la función, deberá llamarla desde un subprocedimiento:
123456789 | Sub PopulateArray ()Dim StrCustomers () como cadenaDim strCol as CollectionDim n tan largo'cuenta las filas en el rangon = Rango ("A1", Rango ("A1"). Fin (xlDown)). Rows.Count'ejecuta la función para crear una matriz de valores únicosstrCustomers () = CreateUniqueList (1, n)End Sub |