VBA Matrix - Opret og mere

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.

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave