Variáveis ​​de matriz usando VBA no Microsoft Excel 2010

Índice:

Anonim

Como usar o Excel VBA Array?

Você pode executar as macros no Editor do Visual Basic, colocando o cursor na macro e pressionando a tecla F5, ou no Excel, abrindo a caixa de diálogo Macros (ALT + F8), escolhendo a macro a ser executada e clicando em Executar. É melhor executar essas macros no Editor do Visual Basic usando Depurar> Entrar em (pressionando F8) para que você possa observá-los enquanto trabalham. Instrução Se a guia do desenvolvedor não estiver na faixa de opções …

  • Abra o Excel.
  • Vá para o Editor VBA (pressione Alt + F11)
  • Vá para a janela imediata. (Ctrl + G)
  • Escreva abaixo o código.
    • Application.ShowDevTools = True

Como inserir o código VBA no Excel

  • Vamos para Desenvolvedor Tab> Código Grupo> Visual básico
  • Clique Inserir > Módulo.
  • Abrirá um Módulo em Branco para você.
  • Escreva / cole o código fornecido nesse módulo

Como executar o código VBA no Excel

  • Selecione qualquer lugar entre o Código, Sub… End Sub
  • Clique em Executar e Executar Sub ou F5

Variáveis ​​de matriz estática

Em vez de usar várias variáveis ​​exclusivas para armazenar informações, você pode usar uma variável de matriz.

Quando você sabe quantos elementos precisa armazenar na matriz, pode usar uma variável de matriz estática como esta:

Código


Sub TestStaticArray ()
'armazena 10 nomes na pasta de trabalho na variável de matriz MyNames ()
Dim MyNames (1 a 10) As String 'declara uma variável de matriz estática
Dim iCount As Integer
Para iCount = 1 Para ThisWorkbook.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Debug.Print MyNames (iCount)
Próximo iCount
Erase MyNames () 'apaga o conteúdo da variável, liberando memória
End Sub

Decodificar

Dim MyNames (1 a 10) como string

Dimensionei um único MyNames verificável como uma String, que pode conter 10 itens. Portanto, MyNames verificável é um tipo Array.

Dim iCount As Integer

Declaramos uma única variável iCount como Inteiro, que pode conter apenas o tipo de Inteiro Numérico Valor

Para iCount = 1 Para ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count nos dará o número de planilhas em uma pasta de trabalho. ThisWorkbook, refere-se ao Workbook, no qual o código foi escrito.

MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name

Usando um loop, estamos atribuindo o nome de cada folha a um único verificável chamado MyNames. MyNames é um tipo de array verificável, então ele irá armazenar, cada nome de planilha em cada item do array.

Debug.Print MyNames (iCount)

Logo após atribuir o valor a cada item de um array, ele imprimirá o mesmo na janela Immediate, por padrão na parte inferior da janela do VBA. Você pode ver a atribuição de cada valor e exibi-lo na ImmediateWindow.

Próximo iCount

Em seguida, é usado para dizer ao For Loop no Excel VBA para repetir a mesma tarefa novamente, aumentando o Contador iCount, até que o iCount alcance o Número Total de Folhas, na pasta de trabalho.

Variáveis ​​de matriz dinâmica

Variáveis ​​de matriz dinâmica são úteis quando você não sabe com antecedência sobre quantos elementos precisa armazenar informações.

Você declara variáveis ​​de matriz dinâmica como uma variável de matriz estática, exceto que você não fornece nenhuma informação sobre o tamanho da matriz.

No exemplo acima (Dim MyNames (1 a 10) como string) se o número de folhas for maior que 10, ocorrerá um erro, pois MyNames não poderá armazenar mais de 10 itens.

Código

Sub TestDynamicArray ()
'armazena todos os nomes na pasta de trabalho na variável de matriz MyNames ()
Dim MyNames () As String 'declara uma variável de matriz dinâmica
Dim iCount As Integer
Dim Max As Integer
Max = ThisWorkbook.Sheets.Count 'encontra o tamanho máximo da matriz
ReDim MyNames (1 To Max) 'declara a variável de array com o tamanho necessário
Para iCount = 1 até o máximo
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
MsgBox MyNames (iCount)
Próximo iCount
Erase MyNames () 'apaga os conteúdos variáveis, libera alguma memória
End Sub

Decodificar

Dim MyNames () As String

Dimensionamos um único MyNames verificável como String, que é um tipo Array, devido a abrir e fechar Paranthesis, após o nome verificável, mas não será capaz de armazenar nenhum dado nele, pois não fornecemos seu UpperLevel.

ReDim MyNames (1 no máximo)

Redim é usado para redimensionar a matriz. Agora, ele atribuirá o nível superior do tipo de matriz verificável.

Nesse caso, número total de planilhas na pasta de trabalho (Máx = ThisWorkbook.Sheets.Count)

MsgBox MyNames (iCount)

No último exemplo, imprimimos o Valor em Variáveis ​​na Janela Imediata, desta vez, estamos imprimindo o valor em uma MessageBox, que aparecerá assim …

Se você sabe que precisará de uma variável de array com 1000 itens, use uma variável estática. A desvantagem é que você usará memória para 1000 itens todas as vezes, mesmo nos casos em que armazena apenas informações sobre 10 itens. Se você usar uma variável de matriz dinâmica, usará a memória de forma mais eficiente.

Às vezes, não é possível calcular o quão grande a variável de matriz precisará ser. Nesses casos, o tamanho da variável de matriz precisa ser aumentado conforme necessário. Quando você usa um ReDim- declaração para alterar o tamanho da variável do array, o conteúdo da variável também é apagado para evitar a exclusão do conteúdo da variável quando você Redim a variável de array, você precisará usar o ReDim Preserve-demonstração.

Código

Sub GetFileNameList ()
'armazena todos os nomes de arquivos na pasta atual
Dim FolderFiles () As String 'declara uma variável de matriz dinâmica
Dim tmp As String, fCount As Integer
fCount = 0
tmp = Dir ("D: \ Teste \ *. *")
Enquanto tmp vazio
fCount = fCount + 1
ReDim Preserve FolderFiles (1 para fCount)
'declara a variável da matriz novamente (tamanho + 1)
FolderFiles (fCount) = tmp
tmp = Dir
Wend
MsgBox fCount & "nomes de arquivos são encontrados na pasta" & CurDir
Apagar FolderFiles 'exclui o conteúdo variável, liberando memória
End Sub

Decodificar

Dim FolderFiles () As String

Dimensionamos um único FolderFiles verificável como String, que é um tipo Array, devido ao abrir e fechar Paranthesis, após o nome verificável, mas não será capaz de armazenar nenhum dado nele, pois não fornecemos seu UpperLevel.

tmp = Dir ("D: \ Teste \ *. *")

O comando Dir funciona como um explorador, que pode conter o nome de todos os arquivos e pastas em um diretório. Você também pode limitar todos os arquivos a alguns critérios específicos. Dir ("D: \ Test \ *. Pdf") limitará todos os arquivos a apenas arquivos PDF ou extensão.

Enquanto tmp vazio

Em vez do loop For no Excel VBA, desta vez, estamos repetindo a mesma ação, usando o Excel VBA WHILE LOOP, onde os critérios para encerrar o loop foram definidos como tmp diferente de vazio. Então, até que haja algum valor verificável em tmp, o loop funcionará.

ReDim Preserve FolderFiles (1 para fCount)

Os FolderFiles verificáveis ​​da matriz não têm nenhum nível superior na posição inicial. Mas, a cada repetição, aumentará seu nível superior pelo comando ReDim. Na primeira execução 1, depois 2 … e assim por diante, até fCount. No entanto, a cada vez que aumentar o nível superior, ele perderá todas as variáveis ​​já atribuídas. Usando o comando Preserve, podemos reter ou armazenar o valor já atribuído.

Wend

Wend costumava dizer aos For Loops em VBA para repetir a mesma tarefa novamente, até que os critérios fossem atendidos.

MsgBox fCount & "nomes de arquivos são encontrados na pasta" & CurDir

A cada repetição, fcout aumentará em +1 e seu valor final será o número de arquivos encontrados naquele diretório / pasta. O comando CurDir fornece o nome do diretório atual. Neste caso, “D: \ Test”