Este tutorial ensinará como preencher uma matriz com valores exclusivos de uma coluna no VBA.
Preencher matriz com valores exclusivos da coluna
Colocar uma lista de valores de uma planilha do Excel em um Array é uma questão de percorrer as linhas do Excel e preencher o array.
Considere a seguinte lista de clientes em uma planilha do Excel.
Usando um loop, poderíamos popular um Array em VBA. No entanto, um loop padrão percorrerá cada linha, incluindo linhas duplicadas e você terminará com valores duplicados em seu Array.
A solução para percorrer as células e preencher um objeto de coleção com os valores como um objeto de coleção não permitirá duplicatas. Você pode então usar esse objeto de coleção para preencher sua matriz.
1234567891011121314151617181920212223242526 | Sub PopulateUniqueArray ()Dim StrCustomers () As StringDim Col como nova coleçãoDim valCell As StringDim i As IntegerDim n As Integer'contar as linhas no intervalon = Intervalo ("A1", Intervalo ("A1"). Fim (xlDown)). Linhas.Contagem'Preencher coleção temporáriaOn Error Resume NextPara i = 0 para nvalCell = Range ("A1"). Offset (i, 0) .ValueCol.Add valCell, valCellProximo euErr.ClearNo erro GoTo 0'Resize nn = Col.Count'Redeclare arrayReDim StrCustomers (1 para n)'Preencher Array percorrendo a coleçãoPara i = 1 para Col.CountStrCustomers (i) = Col (i)Proximo euDebug.Print Join (StrCustomers (), vbCrLf)End Sub |
Preencher matriz com valores exclusivos - função
O exemplo acima mostrou um procedimento que executaria as ações desejadas. Mas, em vez disso, você pode preferir uma função portátil para realizar a tarefa:
123456789101112131415161718192021222324 | Função CreateUniqueList (nStart as Long, nEnd enquanto) as VariantDim Col como nova coleçãoDim arrTemp() Como FragmentoDim valCell As StringDim i As Integer'Preencher coleção temporáriaOn Error Resume NextPara i = 0 para nEndvalCell = Range ("A" & nStart) .Offset (i, 0) .ValueCol.Add valCell, valCellProximo euErr.ClearNo erro GoTo 0'Resize nnEnd = Col.Count'Redeclare arrayReDim arrTemp(1 ao final)'Preencher a matriz temporária percorrendo a coleçãoPara i = 1 para Col.CountarrTemp(i) = Col (i)Proximo eu'retorna o array temporário para o resultado da funçãoCreateUniqueList = arrTemp()Função Final |
Para usar a função, você precisará chamá-la de um subprocedimento:
123456789 | Sub PopulateArray ()Dim StrCustomers () As StringDim strCol como coleçãoDim n As Long'contar as linhas no intervalon = Intervalo ("A1", Intervalo ("A1"). Fim (xlDown)). Linhas.Contagem'executa a função para criar uma matriz de valores únicosstrCustomers () = CreateUniqueList (1, n)End Sub |