excel vba array array methods with examples
Este tutorial explicará o VBA Array, vários tipos de array, array variante e métodos de array com a ajuda de exemplos de programação:
Uma variável VBA regular é um marcador que armazena o valor de um único dado. Tem uma relação de 1 para 1, ou seja, 1 variável para 1 valor.
Agora imagine armazenar vários valores do mesmo tipo. Em vez de criar várias variáveis, você pode apenas criar uma variável e armazenar todos os mesmos tipos de valores. Essa variável é chamada de ARRAY.
=> Visite aqui para ver a série de treinamento VBA para todos
melhores sites de anime para assistir anime dublado
Neste tutorial, você conhecerá o que é um array VBA, arrays unidimensionais e bidimensionais junto com os diferentes tipos de arrays, como Fixo e Dinâmico. Também entenderemos vários métodos de array usados no VBA.
O que você aprenderá:
VBA Array
Arrays são um tipo especial de variável que pode armazenar vários valores do mesmo tipo de dados.
Por exemplo, se você tiver os nomes de 100 funcionários, em vez de criar 100 variáveis de string de tipo de dados, você pode apenas criar uma variável de array do tipo string e atribuir 100 valores à mesma variável de array.
Matriz unidimensional
Uma matriz que contém todos os elementos em uma única linha ou coluna é chamada de matriz unidimensional. Listar os nomes de todos os alunos da classe em uma única coluna é um exemplo de matriz unidimensional. Ele é declarado conforme mostrado abaixo.
Dim arrayname (lowerbound To UpperBound) As DataType
Existem várias maneiras de declarar uma matriz. Abaixo estão alguns exemplos.
Exemplo:
# 1) Dim MyArrayExample (0 a 3) As Integer
Cria uma matriz com localização 0,1,2,3 que aceitará valores inteiros.
# 2) Dim MyArray2 (3) As String
O padrão é 0 a 3 e cria uma matriz com localização 0,1,2,3 que aceitará valores de String.
# 3) Dim MyArray2 (13 a 15) como duplo
Cria uma matriz a partir de 13, ou seja, 13, 14 e 15, e aceita valores Double. Mencionamos o limite inferior como 13, portanto, a matriz começará a alocar valores a partir do local 13 em vez de 0.
Vamos criar um código simples e entender todas as 3 formas de declaração de array.
Observação: Para escrever o código VB, abra o Microsoft Excel (as versões compatíveis são Excel 2007, 2010, 2013, 2016, 2019). Navegar para Guia Desenvolvedor -> Visual Basic (Como alternativa, use o atalho Alt + F11). No editor VB, clique em Inserir -> Módulo e cole o código abaixo.
Considere o procedimento a seguir, mostrando os diferentes tipos de declarações.
Private Sub arrayExample1() Dim firstQuarter(0 To 2) As String ‘creates array with index 0,1,2 firstQuarter(0) = 'Jan' firstQuarter(1) = 'Feb' firstQuarter(2) = 'Mar' MsgBox 'First Quarter in calendar ' & ' ' & firstQuarter(0) & ' ' & firstQuarter(1) & ' ' & firstQuarter(2) End Sub Private Sub arrayExample2() Dim secondQuarter(2) As String ‘creates array with index 0,1,2 secondQuarter(0) = 'April' secondQuarter(1) = 'May' secondQuarter(2) = 'June' MsgBox 'Second Quarter in calendar ' & ' ' & secondQuarter(0) & ' ' & secondQuarter(1) & ' ' & secondQuarter(2) End Sub Private Sub arrayExample3() Dim thirdQuarter(13 To 15) As String ‘creates array with index 13,14,15 thirdQuarter(13) = 'July' thirdQuarter(14) = 'Aug' thirdQuarter(15) = 'Sep' MsgBox 'Third Quarter in calendar ' & ' ' & thirdQuarter(13) & ' ' & thirdQuarter(14) & ' ' & thirdQuarter(15) End Sub
Pressione F5 ou pressione o botão Executar na barra de ferramentas para executar o código.
Variável Regular Vs Variável Array
Agora sabemos como funciona um array unidimensional. Então, vamos parar um momento para entender por que os arrays são tão cruciais em linguagens de programação.
Suponha que você precise inserir o salário de 5 funcionários. Para conseguir isso usando uma variável regular, você precisa criar 5 variáveis.
Public Sub RegularVariable() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets('Sheet1') ' Declare variable for each student Dim Emp1 As String Dim Emp2 As String Dim Emp3 As String Dim Emp4 As String Dim Emp5 As String ' Read student marks from cell Emp1 = shet.Range('A' & 2).Value Emp2 = shet.Range('A' & 3).Value Emp3 = shet.Range('A' & 4).Value Emp4 = shet.Range('A' & 5).Value Emp5 = shet.Range('A' & 6).Value ' Print student marks Debug.Print 'Emp Name' Debug.Print Emp1 Debug.Print Emp2 Debug.Print Emp3 Debug.Print Emp4 Debug.Print Emp5 End Sub
Agora vamos construir o mesmo código usando uma variável Array.
Option Explicit Public Sub ArrayVarible() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets('Sheet1') Dim Employee(1 To 6) As String Dim i As Integer For i = 1 To 6 Employee(i) = shet.Range('A' & i).Value Debug.Print Employee(i) Next i End Sub
Aqui, acabamos de usar uma variável de matriz que armazenará todos os nomes de funcionários. Suponha que você precise adicionar mais 100 nomes de funcionários, então você só precisa alterar o tamanho do array e não precisa criar uma nova variável.
Isso reduzirá o número de linhas no código e, portanto, o tornará facilmente compreensível e legível.
Matriz bidimensional
Uma matriz bidimensional possui 2 índices - o primeiro índice representará as linhas e o segundo índice representará a coluna. Possui várias linhas e colunas e geralmente é representado em formato de tabela.
A declaração de um array 2 dim é a seguinte:
Dim ArrayName (FirstIndex para LastIndex, FirstIndex para LastIndex) como DataType.
Considere um exemplo de armazenamento de notas de 2 alunos obtidas em 3 disciplinas. Portanto, criaremos um array bidimensional que possui 2 linhas e 3 colunas.
Começaremos a matriz da linha 1 à linha 2 e da coluna 1 à coluna 3.
Sub Twodim() Dim totalMarks(1 To 2, 1 To 3) As Integer totalMarks(1, 1) = 23 totalMarks(2, 1) = 34 totalMarks(1, 2) = 33 totalMarks(2, 2) = 55 totalMarks(1, 3) = 45 totalMarks(2, 3) = 44 Msgbox “Total Marks in Row 2 and column 2 is “ &totalMarks(2,2) Msgbox “Total Marks in Row 1 and column 3 is “ &totalMarks(1,3) End Sub
Pressione F5 ou pressione o botão Executar na barra de ferramentas para executar o código.
Linha 2 e Coluna 2
Linha 1 e coluna 3
Arrays fixos
Arrays fixos, também chamados de Arrays estáticos, têm um limite inferior e superior fixos e esse tamanho não pode ser alterado em tempo de execução. O tamanho da matriz é especificado durante a declaração entre parênteses. Todos os exemplos acima são arrays fixos, pois mencionamos o tamanho deles durante a declaração.
Arrays fixos são normalmente usados quando você tem certeza sobre o tamanho do array. Por exemplo, o número de dias em uma semana, você pode criar uma matriz com limite inferior 0 e limite superior 6 e ter certeza de que nunca mudará seu tamanho.
Matrizes Dinâmicas
Os arrays dinâmicos nos permitem redimensionar o array durante o tempo de execução. Eles são úteis quando você não tem certeza sobre o tamanho da matriz. Suponha que na admissão na faculdade, você não tenha certeza de quantos alunos realmente conseguirão a admissão, então não pode determinar o tamanho no momento do projeto ou da declaração.
A declaração de uma matriz dinâmica é semelhante a uma matriz estática com parênteses vazios.
Dim Employee () As String
REDIM
Quando queremos mudar o tamanho, precisamos usar REDIM , precisamos observar que o limite inferior não pode ser alterado, só podemos alterar o limite superior da matriz.
Sub dynamicArray() Dim dynArray() As String Dim curdate As Date curdate = Now ReDim dynArray(2) ‘ Redim will help to change the array size during runtime dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled after ' & curdate & ' are “ & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) End Sub
Agora, sabemos que podemos alterar o tamanho do array durante o tempo de execução, portanto, podemos usar a instrução ReDim sempre que precisarmos aumentar o ubound de um array. Vamos tentar aumentar o tamanho do array mais uma vez e adicionar um novo nome de aluno.
Sub RedimExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) ReDim dynArray(3) ‘ Redim will reinitialise the array and destroy the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
Você deve ter observado que o resultado não mostra os nomes dos alunos adicionados antes, ele dá um valor nulo. Isso ocorre porque a instrução Redim criará uma nova matriz com um novo tamanho e destruirá os valores antigos.
ReDim Preserve
A instrução Represerve nos ajuda a superar a limitação do ReDim, preservando os valores antigos e, portanto, aumentando o tamanho da matriz.
Vamos reescrever o código acima usando ReDim Preserve.
Sub preserveExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) ReDim preserve dynArray(3) ‘ Redim preserve will retain the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
Como usamos a palavra-chave preserve, os valores inseridos anteriormente não são perdidos e o novo valor é adicionado com sucesso.
Variant Array
Até agora, vimos um array aceitando o mesmo tipo de valores. Agora vamos declarar o array como uma variante e armazenar os vários tipos de dados como String, Date, Long, Integer em um único array.
Exemplo:
Sub arrayVariant() Dim arrayData(3) As Variant arrayData(0) = 'Vikram Vikrant' arrayData(1) = 411234567890# arrayData(2) = 38 arrayData(3) = '06-09-1972' MsgBox 'Details of person ' & arrayData(0) & ' is ' & ' Phone No ' & arrayData(1) & ' ,Id ' & arrayData(2) & ' ,DOB ' & arrayData(3) End Sub
Métodos VBA Array
Existem vários métodos em arrays VBA que nos ajudarão a executar funções diferentes, conforme mencionado abaixo.
Sl. Não | Nome | Sintaxe | Descrição |
---|---|---|---|
7 | Junte-se | Junte-se (matriz fonte, (delimitador)) | Une várias substrings em uma matriz e retorna um valor de string. |
1 | Variedade | Array (fraudulento) | Converte uma variante regular variável em um Array. |
dois | Apagar | Apagar nome do array | Usado para reintializar a matriz de tamanho fixo e libera a memória para o array dinâmico. |
3 | IsArray | IsArray (nome da variável) | Determina se uma variável é uma matriz. |
4 | Lbound | LBound (ArrayName, (Dimension)) | Retorna o menor subscrito de uma matriz. |
5 | Ubound | UBound (ArrayName, (Dimension)) | Retorna o índice mais alto de uma matriz. |
6 | Dividir | Divisão (expressão, (delimitador, (limite, (comparar)))) | Ele divide uma string em várias substrings e retorna uma matriz baseada em zero. |
8 | Filtro | Filtro (matriz fonte, correspondência, (incluir, (comparar))) | O filtro nos permitirá pesquisar um correspondência especificada de uma matriz. |
Vamos discutir cada um deles em detalhes com um exemplo.
# 1) Matriz
Vamos declarar uma variável variante regular e usá-la como um array. Quando você deseja alterar uma variável variante regular em um array, precisamos usar um VARIEDADE função conforme mostrado no exemplo abaixo.
As funções de matriz aceitam um argumento que contém valores separados por vírgula. Esses valores são atribuídos como um elemento da matriz.
Sub variantArray() Dim varData As Variant varData = Array('Mon Bel', '+61 112334123', 567, '06-09-1972') MsgBox 'Details of person ' & varData(0) & ' is ' & ' Phone No ' & varData(1) & ' ,Id ' & varData(2) & ' ,DOB ' & varData(3) End Sub
Você deve identificar uma variável de array usando um índice, portanto, no exemplo acima, os valores são recuperados como varData (0) varData (2) varData (3).
# 2) Apagar
Esta função apagará todos os valores inseridos para uma matriz de tamanho fixo e liberará espaço de memória para uma matriz dinâmica.
Sintaxe: Erase arrayname
Apagar tem um comportamento diferente para diferentes tipos de dados, conforme mostrado abaixo.
- Para um numérico fixo: Todos os valores são redefinidos para zero.
- Para um tipo de dados de string fixa: Todos os valores são redefinidos para comprimento zero.
- Para uma matriz dinâmica: Libera a memória usada pelo array.
Exemplo:
Sub eraseExample() Dim NumArray(3) As Integer Dim decArray(2) As Double Dim strArray(2) As String NumArray(0) = 12345 decArray(1) = 34.5 strArray(1) = 'Erase Function' Dim DynaArray() ReDim DynaArray(3) MsgBox ' Values before Erase ' & (NumArray(0)) & ',' & (decArray(1)) & ' , ' & (strArray(1)) Erase NumArray Erase decArray Erase strArray Erase DynaArray ' Free the memory ' All values are erased. MsgBox ' Values after Erase ' & NumArray(0) & ',' & decArray(1) & ' , ' & strArray(1) End Sub
Resultado antes de usar a função Apagar
Resultado após usar Apagar
# 3) IsArray
Esta função é usada para determinar se a variável de entrada fornecida é uma matriz ou não. Retorna verdadeiro se a variável inserida for verdadeira, senão retorna falso.
Sintaxe: IsArray (nome da variável)
Exemplo:
Sub isArrayTest() Dim arr1, arr2 As Variant arr1 = Array('Jan', 'Feb', 'Mar') arr2 = '12345' MsgBox ('Is arr1 an Array : ' & IsArray(arr1)) MsgBox ('Is arr2 an Array : ' & IsArray(arr2)) End
O resultado do primeiro Msgbox
O resultado do segundo msgbox
# 4) Lbound
Ele retorna o menor subscrito da matriz especificada como o argumento para a função Lbound.
Sintaxe: LBound (ArrayName, (Dimension))
ArrayName é o nome da matriz.
Dimensão é o valor inteiro opcional, se a matriz tiver várias dimensões, então você pode especificar para qual dimensão deseja determinar o Lbound.
Exemplo:
Sub lboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim Arraywithoutlbound(10) Result1 = LBound(ArrayValue, 1) ' Returns 1. Result2 = LBound(ArrayValue, 3) ' Returns 10. Result3 = LBound(Arraywithoutlbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
# 5) Ubound
Ele retorna o subscrito superior da matriz especificada como um argumento na função Ubound.
Sintaxe: UBound (ArrayName, (Dimension))
ArrayName é o nome da matriz.
Dimensão é o valor inteiro opcional, se a matriz tiver várias dimensões, você pode especificar em qual dimensão deseja determinar o Ubound.
Exemplo:
Sub UboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim ArraywithoutUbound(10) Result1 = UBound(ArrayValue, 1) Result2 = UBound(ArrayValue, 3) Result3 = UBound(ArraywithoutUbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
# 6) Dividir
Ele retorna uma matriz com várias substrings derivadas da string inteira fornecida.
Sintaxe: Split (expressão, (delimitador, (limite, (comparar))))
- Expressão: Esta é a string inteira que será usada para produzir substrings.
- Delimitador: Usando o delimitador especificado, substrings serão geradas. Se isso não for mencionado, o espaço é considerado o delimitador.
- Limite: Número de substrings a serem retornadas.
- Comparar: Depois que a substring é produzida, você pode usar diferentes opções de comparação para testar o resultado.
Exemplo: No exemplo abaixo, estamos usando delimitador como - e limite como 3.
Portanto, a função de divisão separará toda a string em substring com base no delimitador. Mas também mencionamos o limite como 3, de modo que as substrings não serão formadas após o limite 3. Portanto, o último delimitador - será ignorado.
Sub splitExample() Dim MyString As String Dim Result() As String Dim DisplayText As String MyString = 'This is the example for-VBA-Split-Function' Result = Split(MyString, '-',3) MsgBox Result(0) & vbNewLine & Result(1) & vbNewLine & Result(2) & vbNewLine & Result(3) End Sub
# 7) Junte-se
Este é apenas o reverso da divisão, o Join criará uma string combinando várias substrings.
Sintaxe: Join (sourcearray, (delimitador))
Sourcearray: Matriz unidimensional de strings que você deseja unir em uma.
lançar char para int c ++
Delimitador: O delimitador especificado será adicionado após cada string durante a união.
Exemplo:
Sub joinExample() Dim Result As String Dim dirarray(0 To 2) As String dirarray(0) = 'D:' dirarray(1) = 'SoftwareTestingHelp' dirarray(2) = 'Arrays' Result = Join(dirarray, '') MsgBox 'Date after joining ' & Result End Sub
Todos os 3 valores são unidos e é colocado entre cada palavra, como mencionamos como delimitador.
# 8) Filtro
O filtro nos permitirá pesquisar uma correspondência especificada em uma matriz. Com base nos critérios do filtro, o subconjunto de uma matriz de string será retornado.
Sintaxe: Filtro (matriz, correspondência, (incluir, (comparar)))
Exemplo:
Sub filterExample() Dim Mystring As Variant Mystring = Array('Software Testing', 'Testing help', 'Software help') filterString = Filter(Mystring, 'help') MsgBox 'Found ' & UBound(Mystring) - LBound(Mystring) + 1 & ' words matching the criteria ' End Sub
Este exemplo irá pesquisar a palavra “ajuda” em toda a string do array usando a função de filtro.
perguntas frequentes
P # 1) Como obter o comprimento de um array em VBA?
Responda: Para obter o comprimento de um array, usamos a função Ubound. Esta função nos dará um subscrito superior de um array especificado.
P # 2) Como declarar um array em VBA?
Resposta: A matriz unidimensional é declarada conforme mostrado abaixo.
Dim arrayname (lowerbound To UpperBound) As DataType
Exemplo: Dim Myarray (0 a 2) As Integer
Uma matriz bidimensional é declarada conforme mostrado abaixo.
Dim ArrayName (FirstIndex para LastIndex, FirstIndex para LastIndex) como DataType.
Exemplo: Marcas escuras (1 a 3, 0 a 2) como número inteiro
Q # 3) Como converter Range em Array?
Responda: Podemos usar a função Transpor para converter o intervalo em uma matriz. Este código irá criar Mys (10)
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range('A1:A10')) End Sub
P # 4) O que é uma variante de array no VBA?
Responda: Um array variante aceitará todos os tipos de dados para seu índice, ou seja, você pode armazenar diferentes tipos de valores em um único array.
Exemplo:
Dim arrayData (3) como variante
arrayData (0) = 'Vikas Vipal'
arrayData (1) = 411234567890 #
P # 5) O que é uma declaração de base de opção?
Responda: Isso é usado para declarar o subscrito inferior de uma matriz e é usado no início de um módulo. Por padrão, o subscrito inferior é 0 se você declarar a Opção Base 1 no nível do módulo, então para todas as matrizes o subscrito inferior padrão será 1.
Conclusão
Neste tutorial, aprendemos como os Arrays são usados no VBA e vimos como os Arrays são diferentes de uma variável regular. Exploramos arrays unidimensionais e bidimensionais com exemplos. Também discutimos matrizes fixas e dinâmicas.
As maneiras de redimensionar a matriz durante a execução e também preservar os valores usando redim preserve foram discutidas com exemplos. Finalmente, aprendemos os métodos Array que nos ajudarão a realizar várias operações.
=> Verifique TODOS os tutoriais de VBA aqui
Leitura recomendada
- Tutorial do Excel VBA - Introdução ao VBA no Excel
- Tipos de dados VBA - Tipos de dados numéricos e não numéricos em VBA
- Variáveis VBA e opções explícitas em VBA
- Reverter uma matriz em Java - 3 métodos com exemplos
- Tutorial de comprimento de array Java com exemplos de código
- Jagged Array In Java - Tutorial com exemplos
- Tipos de dados de array - int Array, array duplo, Array of Strings etc.
- String Array C ++: Implementação e Representação com Exemplos