Ta vadnica vam bo pokazala, kako z matriko v VBA ustvarite matriko.
Matrica je pravokotna matrika številk z enako količino vrstic in stolpcev. Matrico v VBA lahko ustvarite tako, da vnesete spremenljivke Array in uporabite zanke VBA.
Ustvarjanje matrike v VBA
123456789101112131415 | Sub CreateSimpleMatrix ()Mat mat () kot celo številoDim x, i, j, k kot celo število'ponovno zatemni velikost matrikeMatrika ReDim (1 do 3, 1 do 3) kot celo številox = 1Za i = 1 do 3Za j = 1 do 3matrika (i, j) = xx = (x + 1)Naprej jNaprej i'vrne rezultat na list naenkratObseg ("A1: C3") = matrikaEnd Sub |
Izvajanje zgornjega postopka bo vrnilo preprosto matriko v obseg ("A1: C3") na vaš delovni list.
Pretvorite vektor enojne vrstice v matriko
Razmislite o spodnjem stolpcu številk. Na neki stopnji boste morda želeli stolpec številk pretvoriti v matriko.
S spodnjo funkcijo lahko s seznama števil ustvarimo matriko.
123456789101112131415161718192021 | Funkcija Create_Matrix (Vector_Range As Range, No_Of_Cols_in_output As Integer, No_of_Rows_in_output As Integer) Kot različicaReDim Temp_Array (1 do No_Of_Cols_in_output, 1 To No_of_Rows_in_output)Zatemni No_Of_Elements_In_Vector As IntegerZatemni Col_Count kot celo število, Row_Count kot celo številoNo_Of_Elements_In_Vector = Vector_Range.Rows.Count„Odpravite NULL pogojeČe Vector_Range ni nič, zapustite funkcijoČe je No_Of_Cols_in_output = 0, potem zapustite funkcijoČe je No_of_Rows_in_output = 0, potem zapustite funkcijoČe je No_Of_Elements_In_Vector = 0, potem zapustite funkcijoZa Col_Count = 1 Za No_Of_Cols_in_outputZa vrstico_številka = 1 do štTemp_Array (Col_Count, Row_Count) = Vector_Range.Cells (((No_of_Rows_in_output) * (Col_Count - 1) + Row_Count), 1)Naslednji Row_CountNaslednji Col_CountCreate_Matrix = Temp_ArrayKončana funkcija |
Matrico lahko ustvarimo v Excelovem listu tako, da pokličemo zgornjo funkcijo.
123 | Sub ConvertToMatrix ()Obseg ("C1: H2") = Create_Matrix (Razpon ("A1: A10"), 2, 6)End Sub |
Pretvorite matriko v vektor enojne vrstice
Druga možnost je, da matriko pretvorite v eno vrstico. Razmislite o spodnji matrici.
S spodnjo funkcijo lahko to pretvorimo v enorazsežno matriko.
12345678910111213141516171819202122 | Funkcija Create_Vector (Matrix_Range As Range) Kot variantaZatemni No_of_Cols kot celo število, No_Of_Rows kot celo številoDim i kot celo številoDim j kot celo število'poberi vrstice in stolpce iz matrikeNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (No_of_Cols * No_Of_Rows)„Odpravite NULL pogojeČe Matrix_Range ni nič, zapustite funkcijoČe je No_of_Cols = 0, potem zapustite funkcijoČe je No_Of_Rows = 0, potem zapustite funkcijo'zanka skozi matriko - prvi elementZa j = 1 Za No_Of_Rows'zdaj prebrskaj drugi elementZa i = 0 do No_of_Cols - 1'dodeli začasni matriki z eno dimenzijoTemp_Array ((i * No_Of_Rows) + j) = Matrix_Range.Cells (j, i + 1)Naprej iNaprej jCreate_Vector = Temp_ArrayKončana funkcija |
To funkcijo lahko zdaj pokličemo po spodnjem postopku.
1234567891011 | Sub GenerateVector ()Dim Vector () kot variantaDim k kot celo številoZatemni št. Elementov'vzemi matrikoVector = Create_Vector (Sheets ("Sheet1"). Range ("A1: D5"))'prebrskajte matriko in napolnite listZa k = 0 Do UBound (vektor) - 1Listi ("List1"). Razpon ("G1"). Odmik (k, 0). Vrednost = vektor (k + 1)Naprej kEnd Sub |
Ta postopek bo vrnil naslednji rezultat.
Uporaba WorksheetFunction.MMULT za ustvarjanje matričnega niza
Razmislite o naslednji preglednici.
Spodnji postopek lahko uporabimo za izračun zneska obresti za zgornjo mrežo na podlagi obrestne mere in zneska, ki si ga oseba želi izposoditi.
123456789101112 | Podpora MMULT ()Zatemni rngIntRate As RangeZatemni rngAmtLoan As RangeZatemni rezultat () kot različico'naseljujejo naše objekte obsegaNastavi rngIntRate = Obseg ("B4: B9")Nastavi rngAmtLoan = Razpon ("C3: H3")'uporabite formulo MMULT za polnjenje matrike rezultatovRezultat = Funkcija delovnega lista.MMult (rngIntRate, rngAmtLoan)'napolni listObseg ("C4: H9") = RezultatEnd Sub |
Na zgornjem listu boste opazili, da zgornji postopek celice napolni z vrednostmi in ne s formulami - glej C4 na zgornji sliki - v njem je vrednost 200, ne formula. Uporabljati Funkcija delovnega lista metoda vedno vrne statično vrednost na delovni list in ne formule. To pomeni, da če se obrestna mera ali znesek posojila spremeni, ustrezne vrednosti v izpolnjeni matrici NEBOM spremeniti.
Namesto da uporabite Delovni listFunction.MMULT, lahko z VBA uporabite funkcijo MMULT za celico z uporabo FormulaArray metoda.
123 | Sub InsertMMULT ()Razpon ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"End Sub |
Upoštevajte, da se zdaj, ko je preglednica napolnjena, v celicah uporablja formula.