Denne vejledning viser dig, hvordan du opretter en matrix ved hjælp af en Array i VBA.
En matrix er en rektangulær række af tal med samme mængde rækker og kolonner. Du kan oprette en matrix i VBA ved at udfylde Array -variabler og bruge VBA Loops.
Oprettelse af en matrix i VBA
123456789101112131415 | Sub CreateSimpleMatrix ()Dim matrix () Som heltalDim x, i, j, k Som heltal'dæmp størrelsen på arrayet igenReDim -matrix (1 til 3, 1 til 3) som heltalx = 1For i = 1 til 3For j = 1 til 3matrix (i, j) = xx = (x + 1)Næste jNæste i'returnere resultatet til arket på én gangOmråde ("A1: C3") = matrixAfslut Sub |
Hvis du kører proceduren ovenfor, returneres en simpel matrix til område ("A1: C3") til dit regneark.
Konverter enkelt rækkevektor til en matrix
Overvej kolonnen med tal nedenfor. Du kan på et tidspunkt ønske at konvertere en kolonne med tal til en matrix.
Ved hjælp af nedenstående funktion kan vi oprette en matrix fra listen med tal.
123456789101112131415161718192021 | Funktion Create_Matrix (Vector_Range As Range, No_Of_Cols_in_output As Integer, No_of_Rows_in_output As Integer) Som variantReDim Temp_Array (1 til No_Of_Cols_in_output, 1 To No_of_Rows_in_output)Dim No_Of_Elements_In_Vector som heltalDim Col_Count As Integer, Row_Count As IntegerNo_Of_Elements_In_Vector = Vector_Range.Rows.Count'Eliminer NULL -betingelserHvis Vector_Range ikke er noget, skal du afslutte funktionenHvis No_Of_Cols_in_output = 0 Afslut derefter funktionenHvis No_of_Rows_in_output = 0 Afslut derefter funktionenHvis No_Of_Elements_In_Vector = 0 Afslut derefter funktionenFor Col_Count = 1 Til No_Of_Cols_in_outputFor Row_Count = 1 Til No_of_Rows_in_outputTemp_Array (Col_Count, Row_Count) = Vector_Range.Cells ((((No_of_Rows_in_output) * (Col_Count - 1) + Row_Count), 1)Næste Row_CountNæste Col_CountCreate_Matrix = Temp_ArrayAfslut funktion |
Vi kan oprette matrixen i vores Excel -ark ved at kalde funktionen ovenfor.
123 | Sub ConvertToMatrix ()Område ("C1: H2") = Create_Matrix (område ("A1: A10"), 2, 6)Afslut Sub |
Konverter en matrix til en enkelt rækkevektor
Alternativt kan du konvertere en Matrix til en enkelt række. Overvej Matrix nedenfor.
Ved hjælp af funktionen herunder kan vi konvertere dette til et enkeltdimensionsarray.
12345678910111213141516171819202122 | Funktion Create_Vector (Matrix_Range As Range) som variantDim No_of_Cols As Integer, No_Of_Rows As IntegerDim i As IntegerDim j Som heltal'afhent rækker og kolonner fra matrixenNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (No_of_Cols * No_Of_Rows)'Eliminer NULL -betingelserHvis Matrix_Range ikke er noget, skal du afslutte funktionenHvis No_of_Cols = 0 Afslut derefter funktionenHvis No_Of_Rows = 0 Afslut derefter funktionen'loop gennem arrayet - det første elementFor j = 1 Til No_Of_Rows'gå nu gennem det andet elementFor i = 0 Til No_of_Cols - 1'tildele et midlertidigt array med en enkelt dimensionTemp_Array ((i * No_Of_Rows) + j) = Matrix_Range.Cells (j, i + 1)Næste iNæste jCreate_Vector = Temp_ArrayAfslut funktion |
Vi kan nu kalde denne funktion ved hjælp af nedenstående procedure.
1234567891011 | Sub GenerateVector ()Dim Vector () Som variantDim k Som heltalDim No_of_Elements'få arrayetVector = Create_Vector (Sheets ("Sheet1"). Range ("A1: D5"))'loop gennem arrayet og udfyld arketFor k = 0 Til UBound (vektor) - 1Ark ("Ark1"). Område ("G1"). Forskydning (k, 0). Værdi = vektor (k + 1)Næste kAfslut Sub |
Denne procedure returnerer følgende resultat.
Brug af WorksheetFunction.MMULT til at oprette en Matrix Array
Overvej følgende regneark.
Vi kan bruge proceduren herunder til at beregne rentebeløbet for nettet ovenfor baseret på renten og det beløb, personen ønsker at låne.
123456789101112 | Under anvendelseMMULT ()Dim rngIntRate As RangeDim rngAmtLoan As RangeDim Resultat () Som variant'befolker vores rækkeviddeobjekterIndstil rngIntRate = Range ("B4: B9")Indstil rngAmtLoan = Range ("C3: H3")'brug MMULT -formlen til at udfylde resultatmatrixenResultat = WorksheetFunction.MMult (rngIntRate, rngAmtLoan)'udfyld arketOmråde ("C4: H9") = ResultatAfslut Sub |
Du vil bemærke i arket ovenfor, at proceduren ovenfor udfylder cellerne med værdier frem for formler - se C4 i ovenstående grafik - den har værdien 200 i den, ikke en formel. Bruger ArbejdsarkFunktion metode returnerer altid en statisk værdi til regnearket og ikke en formel. Det betyder, at hvis renten eller lånebeløbet ændres, de tilsvarende værdier i den udfyldte matrix VIL IKKE lave om.
I stedet for at bruge ArbejdsarkFunktion.MMULT, kan du bruge VBA til at anvende MMULT -funktionen på en celle ved hjælp af FormulaArray metode.
123 | UnderindsatsMMULT ()Område ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"Afslut Sub |
Bemærk, at når regnearket er udfyldt, bruges en formel i cellerne.