Questo tutorial ti mostrerà come creare una matrice usando un array in VBA.
Una matrice è una matrice rettangolare di numeri con la stessa quantità di righe e colonne. È possibile creare una matrice in VBA popolando le variabili Array e utilizzando VBA Loops.
Creazione di una matrice in VBA
123456789101112131415 | Sub CreateSimpleMatrix()Dim matrix() come interoDim x, i, j, k As Integer'ridimensiona la dimensione dell'arrayMatrice ReDim(da 1 a 3, da 1 a 3) As Integerx = 1Per i = da 1 a 3Per j = da 1 a 3matrice(i, j) = xx = (x + 1)Avanti jAvanti io'riporta il risultato sul foglio in una volta solaIntervallo("A1:C3") = matriceFine sottotitolo |
L'esecuzione della procedura sopra restituirà una semplice matrice a Range ("A1: C3") nel foglio di lavoro.
Converti un vettore a riga singola in una matrice
Considera la colonna di numeri qui sotto. Ad un certo punto potresti voler convertire una colonna di numeri in una matrice.
Utilizzando la funzione sottostante, possiamo creare una matrice dall'elenco di numeri.
123456789101112131415161718192021 | Funzione 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 a No_Of_Cols_in_output, 1 a No_of_Rows_in_output)Dim No_Of_Elements_In_Vector As IntegerDim Col_Count As Integer, Row_Count As IntegerNo_Of_Elements_In_Vector = Vector_Range.Rows.Count"Elimina condizioni NULL"Se Vector_Range non è nulla, quindi esci dalla funzioneSe No_Of_Cols_in_output = 0 Allora esci dalla funzioneSe No_of_Rows_in_output = 0 allora esci dalla funzioneSe No_Of_Elements_In_Vector = 0 allora esci dalla funzionePer Col_Count = 1 a No_Of_Cols_in_outputPer Row_Count = 1 a No_of_Rows_in_outputTemp_Array(Col_Count, Row_Count) = Vector_Range.Cells(((No_of_Rows_in_output) * (Col_Count - 1) + Row_Count), 1)Riga_conteggio successivaCol_Count successivoCreate_Matrix = Temp_ArrayFine funzione |
Possiamo creare la matrice nel nostro foglio Excel, chiamando la funzione sopra.
123 | Sub ConvertToMatrix()Intervallo("C1:H2") = Create_Matrix(Intervallo("A1:A10"), 2, 6)Fine sottotitolo |
Converti una matrice in un vettore a riga singola
In alternativa, potresti voler convertire una matrice in una riga singola. Considera la matrice di seguito.
Usando la funzione seguente, possiamo convertirlo in un array a dimensione singola.
12345678910111213141516171819202122 | Funzione Create_Vector(Matrix_Range As Range) As VariantDim No_of_Cols As Integer, No_Of_Rows As IntegerDim i As IntegerDim j come intero'raccogli le righe e le colonne dalla matriceNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array(No_of_Cols * No_Of_Rows)"Elimina condizioni NULL"Se Matrix_Range non è nulla, allora esci dalla funzioneSe No_of_Cols = 0 allora esci dalla funzioneSe No_Of_Rows = 0 allora esci dalla funzione'loop attraverso l'array - il primo elementoPer j = 1 a No_Of_Rows'ora passa attraverso il secondo elementoPer i = 0 a No_of_Cols - 1'assegna a una matrice temporanea a dimensione singolaTemp_Array((i * No_Of_Rows) + j) = Matrix_Range.Cells(j, i + 1)Avanti ioAvanti jCreate_Vector = Temp_ArrayFine funzione |
Ora possiamo chiamare questa funzione usando la procedura seguente.
1234567891011 | Sub GeneraVettore()Dim Vector() come varianteDim k As IntegerDim No_of_Elements'ottenere l'arrayVettore = Crea_Vettore(Fogli("Foglio1").Intervallo("A1:D5"))'loop attraverso l'array e popola il foglioPer k = 0 a UBound(Vettore) - 1Fogli("Foglio1").Intervallo("G1").Offset(k, 0).Valore = Vettore(k + 1)Avanti kFine sottotitolo |
Questa procedura restituirà il seguente risultato.
Utilizzo di WorksheetFunction.MMULT per creare una matrice di matrici
Considera il seguente foglio di calcolo.
Possiamo utilizzare la procedura seguente per calcolare l'importo degli interessi per la griglia sopra in base al tasso di interesse e all'importo che la persona vuole prendere in prestito.
123456789101112 | Uso secondarioMMULT()Dim rngIntRate As RangeDim rngAmtLoan As RangeRisultato debole() come variante'popola la nostra gamma di oggettiImposta rngIntRate = Intervallo ("B4: B9")Imposta rngAmtLoan = Range("C3:H3")'usa la formula MMULT per riempire l'array dei risultatiRisultato = WorksheetFunction.MMult(rngIntRate, rngAmtLoan)'popola il foglioIntervallo("C4:H9") = RisultatoFine sottotitolo |
Noterai nel foglio sopra, che la procedura sopra popola le celle con valori anziché formule - vedi C4 nel grafico sopra - ha il valore 200, non una formula. Usando il Foglio di lavoroFunzione Il metodo restituisce sempre un valore statico al foglio di lavoro e non una formula. Ciò significa che se il tasso di interesse o l'importo del prestito cambiano, i valori corrispondenti nella matrice compilata NON modificare.
Invece di usare il Foglio di lavoroFunzione.MMULT, puoi usare VBA per applicare la funzione MMULT a una cella usando il FormulaArray metodo.
123 | SottoInserimentoMMULTO()Intervallo ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"Fine sottotitolo |
Nota che ora quando il foglio di calcolo viene popolato, nelle celle viene utilizzata una formula.