Para armazenar mais de uma coluna de dados, precisamos de uma dimensão diferente do array. Exemplo:
Salvando dados em uma matriz bidimensional:
'Declaração Dim array_example(10, 2) 'Matriz "definida" 11 x 3 'Salvando dados em um array For i = 0 To 10 array_example(i, 0) = Range("A" & i + 2) array_example(i, 1) = Range("B" & i + 2) array_example(i, 2) = Range("C" & i + 2) Next
Aqui estão alguns exemplos de como trabalhar com esses valores:
MsgBox array_example(0, 0) '=> retorno: 11/03/2026 MsgBox array_example(0, 1) '=> retorna: 24 MsgBox array_example(9, 2) '=> retorna: NO MsgBox array_example(10, 2) '=> retorna: SIM
Vamos imaginar por um momento que precisamos atualizar os dados do nosso array regularmente e, portanto, não podemos atribuir valores fixos no momento da declaração...
Para saber o número da linha da última célula não vazia, ou seja, da última linha do nosso banco de dados, usaremos a seguinte fórmula:
last_row = Range("A1").End(xlDown).Row
Excel não aceita variáveis na declaração.
Em vez disso, declare um array dinâmico (usando parênteses vazios) e defina seu tamanho usando Redim:
Dim array_example() ReDim array_example(last_row - 2, 2)
Usando o procedimento a seguir, você pode armazenar todas as linhas do seu conjunto de dados (tabela) em nosso array:
Dim array_example() ReDim array_example(last_row - 2, 2)
No exemplo anterior, o último número do nosso array foi last_row - 2:
For i = 0 To last_row - 2
Outra forma de determinar o último número do nosso array poderia ser usando Ubound:
For i = 0 To UBound(array_example)
Esta função retorna o maior número na matriz para a dimensão selecionada (a primeira dimensão é o padrão).
Aqui estão alguns exemplos que tornarão isso mais claro:
Sub example() Dim array_example(10, 2) MsgBox UBound(array_example) '=> retorna: 10 MsgBox UBound(array_example, 1) '=> retorna: 10 MsgBox UBound(array_example, 2) '=> retorna: 2 End Sub
É possível preencher um array com valores de um intervalo de células de uma planilha sem sequer usar um loop:
'Declaração Dim array_example(10, 2) 'Matriz "definida" 11 x 3 'Salvando dados em um array For i = 0 To 10 array_example(i, 0) = Range("A" & i + 2) array_example(i, 1) = Range("B" & i + 2) array_example(i, 2) = Range("C" & i + 2) Next
O código anterior pode ser efetivamente substituído por este:
'Declaração Dim array_example() 'Salvando dados em um array array_example = Range("A2:C12").Value
Embora o segundo método pareça mais atraente que o primeiro, tenha em atenção que na maioria dos casos a sua implementação pode custar mais tempo do que o primeiro.
Se você armazenar os dados em seu array desta forma, o primeiro número será 1 em vez de 0, o que pode causar confusão...
Posteriormente, no processo de aumento do código, se você decidir armazenar apenas dados que correspondam a determinados critérios de pesquisa no array (ou realizar uma operação completamente diferente), você terá que reescrever completamente o código usando uma função de loop diferente...
Mas este segundo método é bastante útil se você precisar salvar todo o conteúdo de um grande conjunto de dados, porque é mais rápido que o loop (economizando cerca de 0,2 segundos para cada 15.000 registros).
Mas se precisar criar um array que tenha conteúdo "fixo".
Uma solução poderia ser gravar os valores fita por fita:
Dim en(5) en(0) = "IF" en(1) = "VLOOKUP" en(2) = "SUM" en(3) = "COUNT" en(4) = "ISNUMBER" en(5) = "MID"
Felizmente, você pode simplificar esse código usando um array (Array):
en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID")
Aqui está uma demonstração do uso da função Replace (isso ajudará você a entender o exemplo a seguir):
Sub replace_example() Dim var_translate As String 'Faixa de texto para este exemplo var_translate = "Hello World !" 'Substitua “World” por “you” na faixa de texto var_translate = Replace(var_translate, "World", "you") 'Fita após substituição MsgBox var_translate '=> retorna "Olá!" End Sub
Agora, se quisermos substituir uma série de valores por outro conjunto de dados, usar arrays e a função Array será extremamente útil:
Sub translate() 'Um exemplo simplificado de tradução de fórmulas do inglês para o francês Dim var_translate As String 'Faixa de texto para este exemplo var_translate = "Formula to translate : SUM(IF(ISNUMBER(A1:E1),A1:E1,0))" 'Dois conjuntos de valores en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID") fr = Array("SI", "RECHERCHEV", "SOMME", "NB", "ESTNUM", "STXT") 'Substitua "SI" por "IF", "RECHERVEV" por "VLOOKUP", etc. For i = 0 To UBound(en) var_translate = Replace(var_translate, en(i), fr(i)) Next 'Fita após substituição MsgBox var_translate '=> retorna "Formula para traduzir: SOMME(SI(ESTNUM(A1:E1),A1:E1,0))" End Sub
A função Split nos permite dividir a sequência de caracteres em partes e escrever os valores resultantes em um array.
Para converter uma faixa de opções em uma matriz, faça o seguinte:
variable = "IF/VLOOKUP/SUM/COUNT/ISNUMBER/MID"
Use a função VBA Split e especifique o separador:
en = Split(variable, "/")
A matriz "en" retornará os seguintes valores:
MsgBox en(0) '=> retorna: IF MsgBox en(1) '=> retorna: PROCV MsgBox en(2) '=> retorna: SOMA MsgBox en(3) '=> retorna: CONTAGEM MsgBox en(4) '=> retorna: ISNUMBER MsgBox en(5) '=> retorna: MID
As três matrizes a seguir também retornarão os mesmos valores:
en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID") en = Split("IF,VLOOKUP,SUM,COUNT,ISNUMBER,MID", ",") en = Split("IF VLOOKUP SUM COUNT ISNUMBER MID", " ")
O exemplo a seguir retorna o terceiro valor da string:
MsgBox Split("IF,VLOOKUP,SUM,COUNT,ISNUMBER,MID", ",")(2) '=> retorna: SOMA
O inverso de Split é a função VBA Join.
Esta função coleta os valores de um array em uma string.
MsgBox Join(Array(1, 2, 3, 4, 5), "") '=> retorna: 12345