Matrizes no Visual Basic for Application

Matrizes no Visual Basic for Application são estruturas que normalmente armazenam conjuntos de variáveis ​​relacionadas do mesmo tipo. As entradas da matriz são acessadas por seu índice numérico.

Por exemplo, há uma equipe de 20 pessoas cujos nomes precisam ser salvos para uso posterior no código VBA. Pode-se simplesmente declarar 20 variáveis ​​para armazenar cada nome, assim:

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

Mas você pode usar uma maneira muito mais simples e organizada - armazene uma lista de nomes de membros da equipe em uma matriz de 20 variáveis ​​como Tanga:

Dim Team_Members(1 a 20) como string

Na linha mostrada acima, declaramos um array. Agora vamos escrever um valor para cada um de seus elementos, assim:

Team_Members(1) = "João Smith"

Uma vantagem adicional de armazenar dados em uma matriz, em comparação com o uso de variáveis ​​separadas, torna-se aparente quando se torna necessário executar a mesma ação em cada elemento da matriz. Se os nomes dos membros da equipe fossem armazenados em 20 variáveis ​​separadas, seriam necessárias 20 linhas de código para escrever cada vez para executar a mesma ação em cada uma delas. No entanto, se os nomes estiverem armazenados em uma matriz, você poderá executar a ação desejada com cada um deles usando um loop simples.

Como funciona é demonstrado abaixo com um exemplo de código que imprime os nomes de cada membro da equipe sequencialmente nas células da coluna. A planilha Excel ativa.

Para i = 1 a 20 células(i,1).Value = Team_Members(i) Próximo i

Obviamente, trabalhar com um array que armazena 20 nomes é muito menos complicado e mais preciso do que usar 20 variáveis ​​separadas. Mas e se esses nomes não forem 20, mas 1000? E se, além disso, for necessário manter os sobrenomes e patronímicos separadamente?! É claro que em breve se tornará completamente impossível lidar com esse volume de dados no código VBA sem a ajuda de um array.

Matrizes multidimensionais no Excel Visual Basic

As matrizes do Visual Basic discutidas acima são consideradas unidimensionais. Isso significa que eles armazenam uma lista simples de nomes. No entanto, as matrizes podem ter várias dimensões. Por exemplo, uma matriz bidimensional pode ser comparada a uma grade de valores.

Digamos que você queira salvar os números de vendas diários de janeiro para 5 equipes diferentes. Isso exigirá uma matriz bidimensional composta por 5 conjuntos de métricas por 31 dias. Vamos declarar um array assim:

Dim Jan_Sales_Figures(1 a 31, 1 a 5) como moeda

Para acessar os elementos do array Jan_Sales_Figures, você precisa usar dois índices indicando o dia do mês e o número do comando. Por exemplo, o endereço de um elemento contendo números de vendas para 2-ah equipes para 15º Janeiro seria escrito assim:

Jan_Sales_Figures(15, 2)

Da mesma forma, você pode declarar um array com 3 ou mais dimensões – basta adicionar dimensões adicionais à declaração do array e usar índices adicionais para se referir aos elementos desse array.

Declarando Arrays no Excel Visual Basic

Anteriormente neste artigo, já vimos vários exemplos de declaração de arrays no VBA, mas esse tópico merece uma análise mais detalhada. Como mostrado, um array unidimensional pode ser declarado assim:

Dim Team_Members(1 a 20) como string

Tal declaração diz ao compilador VBA que a matriz Membros do time consiste em 20 variáveis ​​que podem ser acessadas em índices de 1 a 20. No entanto, podemos pensar em numerar nossas variáveis ​​de array de 0 a 19, caso em que o array deve ser declarado assim:

Dim Team_Members(0 a 19) como string

De fato, por padrão, a numeração dos elementos do array começa em 0 e, na declaração do array, o índice inicial pode não ser especificado, assim:

Dim Team_Members(19) como string

O compilador VBA tratará tal entrada como declarando uma matriz de 20 elementos com índices de 0 a 19.

As mesmas regras se aplicam ao declarar matrizes multidimensionais do Visual Basic. Conforme já mostrado em um dos exemplos, ao declarar um array bidimensional, os índices de suas dimensões são separados por vírgula:

Dim Jan_Sales_Figures(1 a 31, 1 a 5) como moeda

No entanto, se você não especificar um índice inicial para ambas as dimensões da matriz e declará-lo assim:

Dim Jan_Sales_Figures(31, 5) como moeda

então esta entrada será tratada como um array bidimensional, cuja primeira dimensão contém 32 elementos com índices de 0 a 31, e a segunda dimensão do array contém 6 elementos com índices de 0 a 5.

Matrizes dinâmicas

Todas as matrizes nos exemplos acima têm um número fixo de dimensões. No entanto, em muitos casos não sabemos de antemão qual deve ser o tamanho do nosso array. Podemos sair da situação declarando uma enorme matriz, cujo tamanho certamente será maior do que o necessário para nossa tarefa. Mas essa solução exigirá muita memória extra e pode tornar o programa mais lento. Existe uma solução melhor. Podemos usar um array dinâmico – este é um array cujo tamanho pode ser definido e alterado quantas vezes durante a execução de uma macro.

Um array dinâmico é declarado com parênteses vazios, assim:

Dim Team_Members() como string

Em seguida, você precisará declarar a dimensão do array durante a execução do código usando a expressão ReDim:

ReDim Team_Members(1 a 20)

E se durante a execução do código você precisar alterar novamente o tamanho do array, então você pode usar a expressão ReDim novamente:

If Team_Size > 20 Then ReDim Team_Members(1 To Team_Size) End If

Tenha em mente que redimensionar um array dinâmico dessa forma resultará na perda de todos os valores armazenados no array. Para armazenar dados já no array, você precisa usar a palavra-chave Preservarcomo mostrado abaixo:

If Team_Size > 20 Then ReDim Preserve Team_Members(1 To Team_Size) End If

Infelizmente a palavra-chave Preservar só pode ser usado para alterar o limite superior de uma dimensão de matriz. O limite inferior de uma matriz não pode ser alterado dessa maneira. Além disso, se a matriz tiver várias dimensões, usar a palavra-chave Preservar, apenas a última dimensão da matriz pode ser redimensionada.

Deixe um comentário