Tento tutoriál vám ukáže, jak vytvořit matici pomocí pole ve VBA.
Matice je obdélníkové pole čísel se stejným počtem řádků a sloupců. Matici ve VBA můžete vytvořit naplněním proměnných Array a pomocí smyček VBA.
Vytvoření matice ve VBA
123456789101112131415 | Sub CreateSimpleMatrix ()Dim matice () jako celé čísloDim x, i, j, k jako celé číslo're-dim the size of the arrayMatice ReDim (1 až 3, 1 až 3) jako celé číslox = 1Pro i = 1 až 3Pro j = 1 až 3matice (i, j) = xx = (x + 1)Další jPříště já'Vraťte výsledek na list najednouRozsah ("A1: C3") = maticeEnd Sub |
Spuštěním výše uvedeného postupu se do vašeho listu vrátí jednoduchá matice rozsahu („A1: C3“).
Převeďte jednořadý vektor na matici
Zvažte níže uvedený sloupec čísel. V určité fázi můžete chtít převést sloupec čísel na matici.
Pomocí níže uvedené funkce můžeme ze seznamu čísel vytvořit matici.
123456789101112131415161718192021 | Funkce 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 To No_Of_Cols_in_output, 1 To No_of_Rows_in_output)Dim No_Of_Elements_In_Vector As IntegerDim Col_Count jako celé číslo, Row_Count jako celé čísloNo_Of_Elements_In_Vector = Vector_Range.Rows.Count'Odstranit NULL podmínkyPokud Vector_Range není nic, ukončete funkciPokud No_Of_Cols_in_output = 0, ukončete funkciPokud No_of_Rows_in_output = 0, ukončete funkciPokud No_Of_Elements_In_Vector = 0, pak funkci ukončetePro Col_Count = 1 až No_Of_Cols_in_outputPro 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)Další řádek_PočetDalší Col_CountCreate_Matrix = Temp_ArrayKoncová funkce |
Matici můžeme vytvořit v našem listu aplikace Excel zavoláním výše uvedené funkce.
123 | Sub ConvertToMatrix ()Rozsah ("C1: H2") = Create_Matrix (Rozsah ("A1: A10"), 2, 6)End Sub |
Převeďte matici na jednoradový vektor
Alternativně můžete chtít převést matici na jeden řádek. Zvažte níže uvedenou matici.
Pomocí níže uvedené funkce to můžeme převést na pole jedné dimenze.
12345678910111213141516171819202122 | Funkce Create_Vector (Matrix_Range As Range) As VariantDim No_of_Cols As Integer, No_Of_Rows As IntegerDim i As IntegerDim j jako celé číslo'vyzvedněte řádky a sloupce z matice.'No_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (No_of_Cols * No_Of_Rows)'Odstranit NULL podmínkyPokud Matrix_Range není nic, ukončete funkciPokud No_of_Cols = 0, ukončete funkciPokud No_Of_Rows = 0, ukončete funkci'smyčka skrz pole - první prvekPro j = 1 do No_Of_Rows'nyní smyčku přes druhý prvekPro i = 0 do No_of_Cols - 1'přiřadit dočasné dimenzi jedné dimenzeTemp_Array ((i * No_Of_Rows) + j) = Matrix_Range.Cells (j, i + 1)Příště jáDalší jCreate_Vector = Temp_ArrayKoncová funkce |
Tuto funkci nyní můžeme zavolat pomocí níže uvedeného postupu.
1234567891011 | Sub GenerateVector ()Dim Vector () jako variantaDim k As IntegerDim No_of_Elements'získejte poleVector = Create_Vector (Sheets ("Sheet1"). Range ("A1: D5"))'smyčku přes pole a naplňte listPro k = 0 až UBound (vektor) - 1Listy („List1“). Rozsah („G1“). Ofset (k, 0). Hodnota = Vektor (k + 1)Další kEnd Sub |
Tento postup vrátí následující výsledek.
Použití WorksheetFunction.MMULT k vytvoření maticového pole
Zvažte následující tabulku.
Níže uvedený postup můžeme použít k výpočtu výše úroku pro výše uvedenou síť na základě úrokové sazby a částky, kterou si osoba chce půjčit.
123456789101112 | Dílčí použitíMMULT ()Dim rngIntRate As RangeDim rngAmtLoan As RangeDim Result () jako varianta“naplňte naše objekty dosahuNastavit rngIntRate = rozsah ("B4: B9")Nastavit rngAmtLoan = Rozsah ("C3: H3")'použijte vzorec MMULT k vyplnění pole výsledkůVýsledek = WorksheetFunction.MMult (rngIntRate, rngAmtLoan)“naplňte listRozsah ("C4: H9") = VýsledekEnd Sub |
Ve výše uvedeném listu si všimnete, že výše uvedený postup naplňuje buňky spíše hodnotami než vzorci - viz C4 ve výše uvedeném obrázku - má v sobě hodnotu 200, nikoli vzorec. Za použití Pracovní list Funkce metoda vždy vrací do listu statickou hodnotu a ne vzorec. To znamená, že pokud se změní úroková sazba nebo výše půjčky, odpovídající hodnoty ve vyplněné matici NEBUDE změna.
Místo použití WorksheetFunction.MMULT, můžete použít VBA k použití funkce MMULT na buňku pomocí FormulaArray metoda.
123 | Dílčí vložkaMMULT ()Rozsah ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"End Sub |
Všimněte si, že nyní, když je tabulka naplněna, je v buňkách použit vzorec.