Ši pamoka parodys, kaip sukurti matricą naudojant masyvą VBA.
Matrica yra stačiakampis skaičių masyvas, turintis tą patį eilučių ir stulpelių kiekį. Matricą galite sukurti VBA užpildydami masyvo kintamuosius ir naudodami VBA kilpas.
Matricos kūrimas VBA
123456789101112131415 | Sub CreateSimpleMatrix ()Dim matrica () Kaip sveikasis skaičiusDim x, i, j, k As Integeriš naujo pritemdykite masyvo dydį„ReDim“ matrica (nuo 1 iki 3, nuo 1 iki 3) kaip sveikasis skaičiusx = 1Jei i = nuo 1 iki 3Jei j = 1–3matrica (i, j) = xx = (x + 1)Kitas jKitas I.“grąžinkite rezultatą į lapą vienu ypuDiapazonas ("A1: C3") = matricaPabaiga Sub |
Vykdydami aukščiau nurodytą procedūrą, jūsų darbalapyje bus grąžinta paprasta matrica į diapazoną („A1: C3“).
Paverskite vienos eilės vektorių į matricą
Apsvarstykite žemiau esantį skaičių stulpelį. Galbūt tam tikru etapu norėsite skaičių stulpelį paversti matrica.
Naudodamiesi žemiau pateikta funkcija, iš skaičių sąrašo galime sukurti matricą.
123456789101112131415161718192021 | Funkcija Create_Matrix (Vector_Range as Range, No_Of_Cols_in_output as Integer, No_of_Rows_in_output as Integer) kaip variantas„ReDim Temp_Array“ (1 į „No_Of_Cols_in_output“, 1 į „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„Pašalinkite NULL sąlygasJei „Vector_Range“ yra niekas, uždarykite funkcijąJei No_Of_Cols_in_output = 0, tada išeikite iš funkcijosJei No_of_Rows_in_output = 0, tada išeikite iš funkcijosJei No_Of_Elements_In_Vector = 0, tada išeikite iš funkcijosCol_Count = 1 į No_Of_Cols_in_putputRow_Count = 1 iki No_of_Rows_in_putputTemp_Array (Col_Count, Row_Count) = Vector_Range.Cells ((((No_of_Rows_in_output) * (Col_Count - 1) + Row_Count), 1)Kitas eilutės_skaičiusKitas Col_CountCreate_Matrix = Temp_ArrayPabaigos funkcija |
Mes galime sukurti matricą savo „Excel“ lape, paskambinę aukščiau pateikta funkcija.
123 | Sub ConvertToMatrix ()Diapazonas („C1: H2“) = Create_Matrix (Diapazonas („A1: A10“), 2, 6)Pabaiga Sub |
Konvertuokite matricą į vienos eilės vektorių
Arba galite konvertuoti matricą į vieną eilutę. Apsvarstykite žemiau esančią matricą.
Naudodamiesi žemiau pateikta funkcija, galime tai paversti vieno matmens masyvu.
12345678910111213141516171819202122 | Funkcija Create_Vector (Matrix_Range As Range) kaip variantasDim No_of_Cols As Integer, No_Of_Rows As IntegerDim i As IntegerDim j Kaip sveikasis skaičius“paimkite eilutes ir stulpelius iš matricosNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (No_of_Cols * No_Of_Rows)„Pašalinkite NULL sąlygasJei „Matrix_Range“ yra niekas, išeikite iš funkcijosJei No_of_Cols = 0, tada išeikite iš funkcijosJei No_Of_Rows = 0, tada išeikite iš funkcijos'kilpa per masyvą - pirmasis elementasJ = 1 iki No_Of_RowsDabar pereikite prie antrojo elementoJei i = 0 iki No_of_Cols - 1“priskirti vieno matmens laikiną masyvąTemp_Array ((i * No_Of_Rows) + j) = Matrix_Range.Ląstelės (j, i + 1)Kitas I.Kitas jCreate_Vector = Temp_ArrayPabaigos funkcija |
Dabar šią funkciją galime iškviesti atlikdami toliau nurodytą procedūrą.
1234567891011 | Sub GenerateVector ()Šviesus vektorius () kaip variantasDim k Kaip sveikasis skaičiusSumažinti elementų skaičių'gauti masyvąVektorius = Sukurti_vektorių (Lakštai („Lapas1“). Diapazonas („A1: D5“))“peržiūrėkite masyvą ir užpildykite lapąJei k = 0 iki UBound (vektoriaus) - 1Skaičiuoklės („Sheet1“). Diapazonas („G1“). Poslinkis (k, 0) .Vertė = vektorius (k + 1)Kitas kPabaiga Sub |
Ši procedūra duos tokį rezultatą.
Naudodami „WorksheetFunction.MMULT“, kad sukurtumėte matricos masyvą
Apsvarstykite šią skaičiuoklę.
Mes galime naudoti toliau nurodytą procedūrą, kad apskaičiuotume palūkanų sumą už aukščiau pateiktą tinklelį, atsižvelgdami į palūkanų normą ir sumą, kurią asmuo nori pasiskolinti.
123456789101112 | Papildomas naudojimasMMULT ()Dim rngIntRate As RangeDim rngAmtLoan As RangeDim Rezultatas () kaip variantas“užpildykite mūsų diapazono objektusNustatyti rngIntRate = Diapazonas („B4: B9“)Nustatykite rngAmtLoan = Diapazonas („C3: H3“)'naudokite MMULT formulę, kad užpildytumėte rezultatų masyvąRezultatas = WorksheetFunction.MMult (rngIntRate, rngAmtLoan)“užpildykite lapąDiapazonas („C4: H9“) = RezultatasPabaiga Sub |
Aukščiau esančiame lape pastebėsite, kad aukščiau pateikta procedūra užpildo langelius vertėmis, o ne formulėmis - žr. Aukščiau pateiktą grafiką C4 - joje yra 200 vertė, o ne formulė. Naudojant Darbo lapas Funkcija metodas visada grąžina statinę vertę į darbalapį, o ne formulę. Tai reiškia, kad pasikeitus palūkanų normai ar paskolos sumai, atitinkamos užpildytos matricos vertės NEDARYS keistis.
Užuot naudoję Darbo lapasFunkcija.MULT, galite naudoti VBA, kad pritaikytumėte MMULT funkciją langeliui naudodami „FormulaArray“ metodas.
123 | ĮterpimasMMULT ()Diapazonas ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"Pabaiga Sub |
Atminkite, kad dabar, kai skaičiuoklė užpildyta, ląstelėse naudojama formulė.