Este tutorial mostrará como criar uma matriz usando um Array em VBA.
Uma matriz é uma matriz retangular de números com a mesma quantidade de linhas e colunas. Você pode criar uma matriz em VBA preenchendo variáveis Array e usando VBA Loops.
Criando uma matriz em VBA
123456789101112131415 | Sub CreateSimpleMatrix ()Dim matrix () As IntegerDim x, i, j, k como inteirodiminuir o tamanho da matrizMatriz ReDim (1 a 3, 1 a 3) como inteirox = 1Para i = 1 a 3Para j = 1 a 3matriz (i, j) = xx = (x + 1)Próximo jProximo eu'retornar o resultado para a folha de uma vezIntervalo ("A1: C3") = matrizEnd Sub |
Executar o procedimento acima retornará uma matriz simples para Range (“A1: C3”) para sua planilha.
Converter vetor de linha única em matriz
Considere a coluna de números abaixo. Você pode, em algum estágio, desejar converter uma coluna de números em uma matriz.
Usando a função abaixo, podemos criar uma matriz a partir da lista de números.
123456789101112131415161718192021 | Função Create_Matrix (Vector_Range As Range, No_Of_Cols_in_output As Integer, No_of_Rows_in_output As Integer) As VariantReDim Temp_Array (1 para No_Of_Cols_in_output, 1 para No_of_Rows_in_output)Dim No_Of_Elements_In_Vector As IntegerDim Col_Count como inteiro, Row_Count como inteiroNo_Of_Elements_In_Vector = Vector_Range.Rows.Count'Eliminar condições NULLSe Vector_Range for Nothing Then Exit FunctionSe No_Of_Cols_in_output = 0, então saia da funçãoSe No_of_Rows_in_output = 0, então saia da funçãoSe No_Of_Elements_In_Vector = 0, então saia da funçãoPara Col_Count = 1 Para No_Of_Cols_in_outputPara Row_Count = 1 para No_of_Rows_in_outputTemp_Array (Col_Count, Row_Count) = Vector_Range.Cells (((No_of_Rows_in_output) * (Col_Count - 1) + Row_Count), 1)Próximo Row_CountPróximo Col_CountCreate_Matrix = Temp_ArrayFunção Final |
Podemos criar a matriz em nossa planilha Excel, chamando a função acima.
123 | Sub ConvertToMatrix ()Range ("C1: H2") = Create_Matrix (Range ("A1: A10"), 2, 6)End Sub |
Converter uma matriz em um vetor de linha única
Alternativamente, você pode querer converter uma Matriz em uma única linha. Considere a matriz abaixo.
Usando a função abaixo, podemos converter isso em uma matriz de dimensão única.
12345678910111213141516171819202122 | Função Create_Vector (Matrix_Range As Range) As VariantDim No_of_Cols As Integer, No_Of_Rows As IntegerDim i As IntegerDim j As Integer'pegar as linhas e colunas da matrizNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (No_of_Cols * No_Of_Rows)'Eliminar condições NULLSe Matrix_Range for Nothing Then Exit FunctionSe No_of_Cols = 0, então saia da funçãoSe No_Of_Rows = 0, então saia da função'percorre a matriz - o primeiro elementoPara j = 1 para No_Of_Rows'agora percorre o segundo elementoPara i = 0 Para No_of_Cols - 1'atribuir a uma matriz temporária de dimensão únicaTemp_Array ((i * No_Of_Rows) + j) = Matrix_Range.Cells (j, i + 1)Proximo euPróximo jCreate_Vector = Temp_ArrayFunção Final |
Agora podemos chamar essa função usando o procedimento abaixo.
1234567891011 | Sub GenerateVector ()Dim Vector () como varianteDim k As IntegerDim No_of_Elements'obter a matrizVector = Create_Vector (Sheets ("Sheet1"). Range ("A1: D5"))'faz um loop pela matriz e preenche a folhaPara k = 0 Para UBound (Vector) - 1Folhas ("Folha1"). Faixa ("G1"). Deslocamento (k, 0) .Valor = Vetor (k + 1)Próximo kEnd Sub |
Este procedimento retornará o seguinte resultado.
Usando o WorksheetFunction.MMULT para criar um Matrix Array
Considere a seguinte planilha.
Podemos usar o procedimento abaixo para calcular o valor dos juros para a grade acima com base na taxa de juros e no valor que a pessoa deseja tomar emprestado.
123456789101112 | Sub UseMMULT ()Dim rngIntRate As RangeDim rngAmtLoan As RangeResultado Dim () como variante'preencher nossos objetos de alcanceDefina rngIntRate = Range ("B4: B9")Defina rngAmtLoan = Range ("C3: H3")'use a fórmula MMULT para preencher a matriz de resultadosResult = WorksheetFunction.MMult (rngIntRate, rngAmtLoan)'preencher a folhaIntervalo ("C4: H9") = ResultadoEnd Sub |
Você notará na planilha acima, que o procedimento acima preenche as células com valores ao invés de fórmulas - veja C4 no gráfico acima - ele possui o valor 200, não uma fórmula. Usando o WorksheetFunction método sempre retorna um valor estático para a planilha e não uma fórmula. Isso significa que se a taxa de juros ou o valor do empréstimo mudar, os valores correspondentes na matriz preenchida NÃO VOU mudança.
Em vez de usar o WorksheetFunction.MMULT, você pode usar o VBA para aplicar a função MMULT a uma célula usando o FormulaArray método.
123 | Sub InsertMMULT ()Intervalo ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"End Sub |
Observe que agora, quando a planilha é preenchida, uma fórmula é usada nas células.