Acest tutorial vă va arăta cum să creați o matrice folosind o matrice în VBA.
O matrice este o matrice dreptunghiulară de numere cu aceeași cantitate de rânduri și coloane. Puteți crea o matrice în VBA populând variabile Array și utilizând bucle VBA.
Crearea unei matrice în VBA
123456789101112131415 | Sub CreateSimpleMatrix ()Dim matrix () Ca întregDim x, i, j, k Ca întreg'redimensionează dimensiunea matriceiMatricea ReDim (1 până la 3, 1 până la 3) ca număr întregx = 1Pentru i = 1 până la 3Pentru j = 1 până la 3matrice (i, j) = xx = (x + 1)Următorul jApoi eu'returnează rezultatul într-o singură datăGama ("A1: C3") = matriceSfârșitul Sub |
Rularea procedurii de mai sus va readuce o matrice simplă la Range („A1: C3”) în foaia de lucru.
Convertiți vectorul cu un singur rând într-o matrice
Luați în considerare coloana numerelor de mai jos. S-ar putea să doriți la un moment dat să convertiți o coloană de numere într-o matrice.
Folosind funcția de mai jos, putem crea o matrice din lista numerelor.
123456789101112131415161718192021 | Funcție Create_Matrix (Vector_Range As Range, No_Of_Cols_in_output As Integer, No_of_Rows_in_output As Integer) Ca VariantReDim Temp_Array (1 To No_Of_Cols_in_output, 1 To No_of_Rows_in_output)Dim No_Of_Elements_In_Vector Ca întregDim Col_Count As Integer, Row_Count As IntegerNo_Of_Elements_In_Vector = Vector_Range.Rows.Count„Eliminați condițiile NULLDacă Vector_Range nu este nimic, ieșiți din funcțieDacă No_Of_Cols_in_output = 0 atunci Ieșiți din funcțieDacă No_of_Rows_in_output = 0 atunci Ieșiți din funcțieDacă No_Of_Elements_In_Vector = 0 atunci Ieșiți din funcțiePentru Col_Count = 1 To No_Of_Cols_in_outputPentru Row_Count = 1 To No_of_Rows_in_outputTemp_Array (Col_Count, Row_Count) = Vector_Range.Cells (((No_of_Rows_in_output) * (Col_Count - 1) + Row_Count), 1)Următorul Row_CountUrmătorul Col_CountCreate_Matrix = Temp_ArrayFuncția de sfârșit |
Putem crea matricea în foaia noastră Excel, apelând funcția de mai sus.
123 | Sub ConvertToMatrix ()Range ("C1: H2") = Create_Matrix (Range ("A1: A10"), 2, 6)Sfârșitul Sub |
Convertiți o matrice într-un vector cu un singur rând
Alternativ, poate doriți să convertiți o matrice într-un singur rând. Luați în considerare Matricea de mai jos.
Folosind funcția de mai jos, o putem converti într-o matrice cu o singură dimensiune.
12345678910111213141516171819202122 | Funcția Create_Vector (Matrix_Range As Range) Ca variantăDim No_of_Cols as Integer, No_Of_Rows As IntegerDim i IntegerDim j Ca întreg'ridicați rândurile și coloanele din matriceNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (No_of_Cols * No_Of_Rows)„Eliminați condițiile NULLDacă Matrix_Range nu este nimic, ieșiți din funcțieDacă No_of_Cols = 0 atunci Ieșiți din funcțieDacă No_Of_Rows = 0, atunci Ieșiți din funcție'loop through the array - primul elementPentru j = 1 la No_Of_RowsAcum parcurgeți al doilea elementPentru i = 0 To No_of_Cols - 1'atribuie unei matrici temporare cu o singură dimensiuneTemp_Array ((i * No_Of_Rows) + j) = Matrix_Range.Cells (j, i + 1)Apoi euUrmătorul jCreate_Vector = Temp_ArrayFuncția de sfârșit |
Acum putem apela această funcție folosind procedura de mai jos.
1234567891011 | Sub GenerateVector ()Dim Vector () Ca variantăDim k Ca întregAfișează nr_de_elemente'obține matriceaVector = Create_Vector (Sheets ("Sheet1"). Range ("A1: D5"))'parcurgeți matricea și completați foaiaPentru k = 0 la UBound (Vector) - 1Foi ("Sheet1"). Range ("G1"). Offset (k, 0). Valoare = Vector (k + 1)Următorul kSfârșitul Sub |
Această procedură va returna următorul rezultat.
Folosind WorksheetFunction.MMULT pentru a crea un Matrix Array
Luați în considerare următoarea foaie de calcul.
Putem folosi procedura de mai jos pentru a calcula valoarea dobânzii pentru grila de mai sus pe baza ratei dobânzii și a sumei pe care persoana dorește să o împrumute.
123456789101112 | Utilizare secundarăMMULT ()Dim rngIntRate As RangeDim rngAmtLoan As RangeDiminuează rezultatul () ca variantă„populează obiectele noastre de gamăSetați rngIntRate = Range ("B4: B9")Setați rngAmtLoan = Range ("C3: H3")'utilizați formula MMULT pentru a umple matricea de rezultateRezultat = WorksheetFunction.MMult (rngIntRate, rngAmtLoan)'populează foaiaRange ("C4: H9") = RezultatSfârșitul Sub |
Veți observa în foaia de mai sus că procedura de mai sus populează celulele cu valori mai degrabă decât cu formule - vezi C4 în graficul de mai sus - are valoarea 200 în ea, nu o formulă. Folosind Foaie de lucruFuncție metoda returnează întotdeauna o valoare statică în foaia de lucru și nu o formulă. Aceasta înseamnă că, dacă rata dobânzii sau valoarea împrumutului se modifică, valorile corespunzătoare din matricea completată NU VOI Schimbare.
În loc să utilizați WorksheetFunction.MMULT, puteți utiliza VBA pentru a aplica funcția MMULT unei celule folosind FormulaArray metodă.
123 | Sub InsertMMULT ()Interval ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"Sfârșitul Sub |
Observați că acum, când foaia de calcul este completată, se folosește o formulă în celule.