Ez az oktatóanyag megmutatja, hogyan hozhat létre mátrixot egy tömb segítségével a VBA -ban.
A mátrix egy téglalap alakú számtömb, amely azonos számú sort és oszlopot tartalmaz. A VBA -ban mátrixot hozhat létre tömbváltozók feltöltésével és VBA hurkok használatával.
Mátrix létrehozása VBA -ban
123456789101112131415 | Sub CreateSimpleMatrix ()Dim mátrix () Mint egészDim x, i, j, k Mint egész'halványítsa újra a tömb méretétReDim mátrix (1-3., 1-3.) Egész számkéntx = 1I = 1 -től 3 -igHa j = 1 - 3mátrix (i, j) = xx = (x + 1)Következő jKövetkező i'egy menetben visszaadja az eredményt a lapraTartomány ("A1: C3") = mátrixEnd Sub |
A fenti eljárás futtatásával egy egyszerű mátrix kerül vissza a Tartományba („A1: C3”) a munkalapra.
Konvertálja az egysoros vektort mátrixgá
Tekintsük az alábbi számoszlopot. Előfordulhat, hogy bizonyos szakaszokban számsávot szeretne mátrixmá alakítani.
Az alábbi függvény segítségével mátrixot hozhatunk létre a számok listájából.
123456789101112131415161718192021 | Funkció Create_Matrix (Vector_Range as Range, No_Of_Cols_in_output as Integer, No_of_Rows_in_output as Integer) mint VariantReDim Temp_Array (1 - No_Of_Cols_in_output, 1 - No_of_Rows_in_output)Dim No_Of_Elements_In_Vector as IntegerHalvány oszlopszám egészként, sor_szám egészkéntNo_Of_Elements_In_Vector = Vector_Range.Rows.Count„Távolítsa el a NULL feltételeketHa a Vector_Range semmi, akkor lépjen ki a funkcióbólHa No_Of_Cols_in_output = 0, akkor lépjen ki a funkcióbólHa No_of_Rows_in_output = 0, akkor lépjen ki a funkcióbólHa No_Of_Elements_In_Vector = 0, akkor lépjen ki a funkcióbólCol_Count = 1 esetén No_Of_Cols_in_outputRow_Count = 1 esetén No_of_Rows_in_putputTemp_Array (Col_Count, Row_Count) = Vector_Range.Cells ((([No_of_Rows_in_output] * (Col_Count - 1) + Row_Count), 1)Következő sor_számKövetkező oszlopszámCreate_Matrix = Temp_ArrayVége funkció |
A mátrixot létrehozhatjuk Excel lapunkban, a fenti függvény meghívásával.
123 | Sub ConvertToMatrix ()Tartomány ("C1: H2") = Create_Matrix (Tartomány ("A1: A10"), 2, 6)End Sub |
Alakítsa át a mátrixot egysoros vektorrá
Alternatív megoldásként érdemes lehet egy mátrixot egyetlen sorba konvertálni. Tekintsük az alábbi Mátrixot.
Az alábbi függvény segítségével ezt egyetlen dimenziós tömbré alakíthatjuk át.
12345678910111213141516171819202122 | Funkció Create_Vector (Matrix_Range As Range) VariantkéntDim No_of_Cols as Integer, No_Of_Rows as IntegerDim i As IntegerDim j Mint egész'vegye fel a sorokat és oszlopokat a mátrixbólNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (No_of_Cols * No_Of_Rows)„Távolítsa el a NULL feltételeketHa a Matrix_Range semmi, akkor lépjen ki a funkcióbólHa No_of_Cols = 0, akkor lépjen ki a funkcióbólHa No_Of_Rows = 0, akkor lépjen ki a funkcióból'hurok a tömbön - az első elemJ = 1 esetén No_Of_Rows'most hurkolja át a második elemetAz i = 0 esetén a No_of_Cols - 1'hozzárendelés egyetlen dimenziós ideiglenes tömbhözTemp_Array ((i * No_Of_Rows) + j) = Matrix_Range.Cells (j, i + 1)Következő iKövetkező jCreate_Vector = Temp_ArrayVége funkció |
Ezt a funkciót most az alábbi eljárással hívhatjuk meg.
1234567891011 | Sub GenerateVector ()Halvány vektor () mint változatDim k Mint egészHalvány elemek'szerezd meg a tömbötVektor = Create_Vector (Táblázatok ("Sheet1"). Tartomány ("A1: D5"))'hurkolja át a tömböt, és töltse ki a lapotK = 0 esetén UBound (vektor) - 1Táblázatok ("Sheet1"). Tartomány ("G1"). Eltolás (k, 0). Érték = Vektor (k + 1)Következő kEnd Sub |
Ez az eljárás a következő eredményt adja vissza.
A WorksheetFunction.MMULT használatával mátrix tömböt hozhat létre
Tekintsük a következő táblázatot.
Az alábbi eljárással kiszámíthatjuk a fenti rács kamatösszegét a kamatláb és a személy által felvenni kívánt összeg alapján.
123456789101112 | AlhasználatMMULT ()Dim rngIntRate mint tartományDim rngAmtLoan As RangeHalvány eredmény () mint változat'népesítsük be tartományunk objektumaitÁllítsa be az rngIntRate = tartományt ("B4: B9")Állítsa be az rngAmtLoan = tartományt ("C3: H3")'használja az MMULT képletet az eredménytömb kitöltéséreEredmény = WorksheetFunction.MMult (rngIntRate, rngAmtLoan)'töltse ki a lapotTartomány ("C4: H9") = EredményEnd Sub |
Látni fogja a fenti lapon, hogy a fenti eljárás a cellákat értékekkel tölti fel, nem pedig képletekkel - lásd a fenti ábrán a C4 -et - 200 -as érték van benne, nem képlet. Használni a MunkalapFunkció metódus mindig statikus értéket ad vissza a munkalapnak, nem pedig képletet. Ez azt jelenti, hogy ha a kamatláb vagy a kölcsön összege megváltozik, a kitöltött mátrix megfelelő értékei NEM FOG változás.
Ahelyett, hogy a MunkalapFunkció.MMULT, a VBA segítségével alkalmazhatja az MMULT függvényt egy cellára a FormulaArray módszer.
123 | Sub InsertMMULT ()Tartomány ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"End Sub |
Vegye figyelembe, hogy most, amikor a táblázat feltöltésre kerül, egy képletet használnak a cellákban.