Visual Basic for Applications - VBA

 
 

Parte III - Vetores e matrizes

Sumário:
  • Introdução
  • Vetores
  • Matrizes bidimensionais
  • Matrizes fixas e dinâmicas
  • Exercícios
 

Introdução

Vetores e matrizes são estruturas de dados homogêneas conhecidas como Arrays, matrizes, variáveis indexadas, variáveis subscritas ou tabelas em memória, são conjunto de elementos
de mesma natureza. Cada elemento da matriz pode ser distinguido de outros elementos por um ou mais índices inteiros. As estruturas homogêneas ou arrays são divididas em  unidimensionais  e multidimensionais. Geralmente, as estruturas unidimensionais são chamadas de vetores e as multidimensionais são chamadas de matrizes. Um vetor também pode ser considerado uma matriz, variando apenas numa dimensão.

 
 

Vetores 

O vetor ou matriz unidimensional é exatamente uma seqüência linear de elementos armazenados consecutivamente na memória. São variáveis do mesmo tipo declaradas com o mesmo identificador e referenciadas por um índice para determinar sua localização dentro da estrutura.

Ilustração de um vetor:
dom seg ter qua qui sex sab
1 2 3 4 5 6 7
<-- diasSem (nome do vetor)
<-- índice
Operações básicas:
Declaração:   Dim diasSem (1 To 7) As string
Inicialização:   diasSem(1) = "dom": diasSem(2) = "seg": ...
Atribuição:   diasSem(4) = "qua"
Escrita:   MsgBox diasSem(5)
Exemplos de declaração de vetores:
1   Dim valor(10) As integer
2   Dim soma (1 To 15) As integer
3   Dim nome (10 To 30) As string

No primeiro exemplo acima o índice da matriz vai de 0 a 10 – contém 11 elementos. O índice inicial de indexação de um vetor ou a matriz depende da definição da instrução Option Base, na seção de declaração do módulo. Se o comando Option Base 1 for especificado, todos os índices iniciam em 1, caso contrário, em 0. No segundo e terceiro exemplos os índices variam de 1 a 15 e de 10 a 30, respectivamente.

Exemplo:
O procedimento a seguir calcula a média aritmética das notas de uma classe com dez alunos, apresenta a média da turma e as notas que estão acima dessa média.

No primeiro loop For Next o sistema obtém as dez notas, armazena-as no vetor de nome notas e efetua a soma para no final calcular a média das notas. No loop For Next seguinte é relacionado na planilha apenas as notas de valor maior que a média apurada.

O exemplo a seguir atribui um valor randômico para os elementos do vetor. O comando Debug.Print envia a saída para a janela “verificação imediata” que pode ser aberta a partir do menu Exibir do programa editor Visual Basic:

 
 

Matrizes bidimensionais

No Visual Basic, pode-se declarar matrizes com até 60 dimensões. A instrução a seguir declara uma matriz bidimensional de 3 por 5:

ou  Dim matriz (1 To 3, 1 To 5) As Single  
 
 Dim matriz (3, 5) As Single

No primeiro exemplo os índices da matriz iniciam em 1 e no segundo, em 0 se não for declarada no nível de módulo a opção Option Base 1. A primeira dimensão da matriz se refere à linha e a segunda, dimensão à coluna, no primeiro exemplo tem-se uma matriz de 3 linhas por 5 colunas e no segundo, 4 linhas por 6 colunas na ausência do comando Option Base 1.
Para processar matrizes multidimensionais, utiliza-se instruções For...Next aninhadas. O procedimento, a seguir, preenche cada elemento da matriz bidimensional com base no valor de sua localização dentro da matriz:

 Sub exemplo3_matriz()
Dim i As Integer, j As Integer
Dim matriz(3, 5) As Single
' Preenche a matriz com valores e os imprime na janela
' de verificação imediata.
For i = 1 To 3
For j = 1 To 5
matriz(i, j) = i * j
Debug.Print matriz(i, j)
Next j
Debug.Print    ' imprime branco ao completar uma linha.
Next i
 End Sub

Matrizes fixas e dinâmicas

As matrizes declaradas acima são exemplos de matrizes fixas. A matriz dinâmica é declarada deixando-se vazios os parênteses como no exemplo que segue:

   Dim matDinamica ( ) As Integer  

Posteriormente, no procedimento, pode ser especificado o número de elementos através da instrução ReDim. Segue um exemplo de declaração e redimensionamento de uma matriz dinâmica:

 Sub redimatriz()  
Dim dinamica () As Integer' declara uma matriz dinâmica
Dim i As Integer ' declara a variável i (índice)
ReDim dinamica (5)' faz a alocação de cinco elementos
For i = 1 To 5' faz o loop 5 vezes
dinamica (i) = i' inicializa a matriz
Next i 
 ' A próxima instrução redimensiona a matriz e apaga os elementos.
ReDim dinamica (10)' redimensiona para 10
For i = 1 To 10' faz o loop 10 vezes
dinamica (i) = i' inicializa a matriz
Next i 
 ' A instrução a seguir redimensiona a matriz sem apagar os elementos.
ReDim Preserve dinamica (15)' redimensiona para 15
 End Sub 
 
 

Exercícios

  1. Fazer um programa para obter dez números inteiros, armazená-los em um vetor e escrevê-los na ordem inversa de sua leitura.
    Para a entrada dos números utilizar a função InputBox e para a saída, a janela de verificação imediata, através do método Print do objeto Debug.

  2. Fazer um procedimento para receber as notas da primeira e da segunda prova de cinco alunos. Armazenar as notas da primeira e da segunda prova em vetores distintos. Calcular e escrever a média de cada aluno na coluna A partir da linha 4 de Plan1.

  3. Numa pesquisa realizada com um grupo de pessoas pretende-se relacionar as pessoas que têm altura acima da média das pessoas pesquisadas. Elaborar um procedimento para armazenar as alturas e os nomes das pessoas em vetores distintos e exibir a altura média  e os nomes das pessoas com altura maior do que a altura média. Obs.: Encerrar a entrada de dados ao ser digitado o valor 0 para a altura. Cada vetor pode ter no máximo 20 ocorrências.

  4. Fazer um programa para pesquisar o número listado na coluna G da planilha e retornar o conteúdo correspondente da coluna H através da função MsgBox.  O usuário digitará o número desejado na caixa de entrada (InputBox). Caso o argumento não seja encontrado, informar esta condição numa caixa de mensagem.
    Criar um botão na planilha para executar o programa.

  5. Efetuar a soma dos elementos situados abaixo da diagonal principal da matriz mostrada em Plan2, incluindo os elementos da própria diagonal principal. Mostrar o resultado numa caixa de mensagem. A matriz deve ser previamente construída na planilha de nome "Plan2".
    (Diagonal principal é formada pelos elementos A[ij], tais que i = j. Correspondem aos elementos da linha que une o canto superior esquerdo ao canto inferior direito).

  6. Gerar uma matriz identidade de ordem 5, apresentando o resultado em "Plan2", conforme planilha abaixo. Ajustar a largura das colunas através da aplicação do método AutoFit.
    (Matriz identidade é uma matriz quadrada em que todos os elementos da diagonal principal são iguais a 1 e os demais são nulos ou iguais a 0).

 
 

Os exemplos dos exercícios acima foram desenvolvidos numa mesma pasta de planilhas conforme ilustração abaixo. As informações na cor vermelha referem-se aos cabeçalhos e as informações em azul referem-se aos exemplos de dados para os procedimentos. Elas foram digitadas na planilha e, portanto, não são resultados dos procedimentos.

Planilha Plan1:

Planilha Plan2: