VBA Matrix - Skapa & mer

Denna handledning visar dig hur du skapar en matris med en Array i VBA.

En matris är en rektangulär grupp av siffror med samma mängd rader och kolumner. Du kan skapa en matris i VBA genom att fylla i Array -variabler och använda VBA -loopar.

Skapa en matris i VBA

123456789101112131415 Sub CreateSimpleMatrix ()Dim matris () Som heltalDim x, i, j, k Som heltal'dimma om storleken på matrisenReDim -matris (1 till 3, 1 till 3) som heltalx = 1För i = 1 till 3För j = 1 till 3matris (i, j) = xx = (x + 1)Nästa jNästa i'returnera resultatet till arket på en gångOmråde ("A1: C3") = matrisAvsluta Sub

Genom att köra proceduren ovan returneras en enkel matris till område ("A1: C3") till ditt kalkylblad.

Konvertera Single Row Vector till en matris

Tänk på kolumnen med siffror nedan. Du kan vid något tillfälle vilja konvertera en kolumn med siffror till en matris.

Med hjälp av funktionen nedan kan vi skapa en matris från listan över siffror.

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 till 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'Eliminera NULL -villkorOm Vector_Range inte är något så avsluta funktionenOm No_Of_Cols_in_output = 0 Avsluta sedan funktionenOm No_of_Rows_in_output = 0 Avsluta sedan funktionenOm No_Of_Elements_In_Vector = 0 Avsluta sedan funktionenFör Col_Count = 1 Till No_Of_Cols_in_outputFör Row_Count = 1 Till 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ästa rad_räkningNästa Col_CountCreate_Matrix = Temp_ArrayAvsluta funktion

Vi kan skapa matrisen i vårt Excel -blad genom att anropa funktionen ovan.

123 Sub ConvertToMatrix ()Range ("C1: H2") = Create_Matrix (Range ("A1: A10"), 2, 6)Avsluta Sub

Konvertera en matris till en enda radvektor

Alternativt kanske du vill konvertera en matris till en enda rad. Tänk på matrisen nedan.

Med hjälp av funktionen nedan kan vi konvertera detta till en enda dimensionsmatris.

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'plocka upp raderna och kolumnerna från matrisenNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (No_of_Cols * No_Of_Rows)'Eliminera NULL -villkorOm Matrix_Range är ingenting, avsluta sedan funktionenOm No_of_Cols = 0 Avsluta sedan funktionenOm No_Of_Rows = 0 Avsluta sedan funktionen'loop genom arrayen - det första elementetFör j = 1 Till No_Of_Rows'gå nu igenom det andra elementetFör i = 0 Till No_of_Cols - 1'tilldela en tillfällig array med en enda dimensionTemp_Array ((i * No_Of_Rows) + j) = Matrix_Range.Cells (j, i + 1)Nästa iNästa jCreate_Vector = Temp_ArrayAvsluta funktion

Vi kan nu kalla den här funktionen med hjälp av proceduren nedan.

1234567891011 Sub GenerateVector ()Dim Vector () Som variantDim k Som heltalDim No_of_Elements'få matrisenVector = Create_Vector (Sheets ("Sheet1"). Range ("A1: D5"))'gå igenom matrisen och fyll i arketFör k = 0 Till UBound (vektor) - 1Ark ("Ark1"). Område ("G1"). Förskjutning (k, 0). Värde = Vektor (k + 1)Nästa kAvsluta Sub

Detta förfarande kommer att ge följande resultat.

Använda WorksheetFunction.MMULT för att skapa en Matrix Array

Tänk på följande kalkylblad.

Vi kan använda proceduren nedan för att beräkna räntebeloppet för nätet ovan baserat på räntan och det belopp personen vill låna.

123456789101112 UnderanvändningMMULT ()Dim rngIntRate As RangeDim rngAmtLoan As RangeDim Resultat () Som variant'fylla i våra intervallobjektStäll in rngIntRate = Range ("B4: B9")Ange rngAmtLoan = Range ("C3: H3")'använd MMULT -formeln för att fylla resultatmatrisenResultat = WorksheetFunction.MMult (rngIntRate, rngAmtLoan)'fylla i arketOmråde ("C4: H9") = ResultatAvsluta Sub

Du kommer att märka i arket ovan att proceduren ovan fyller cellerna med värden snarare än formler - se C4 i grafiken ovan - det har värdet 200 i det, inte en formel. Använda ArbetsbladFunktion metod returnerar alltid ett statiskt värde till kalkylbladet och inte en formel. Det betyder att om räntan eller lånebeloppet ändras, motsvarande värden i den ifyllda matrisen SKA INTE förändra.

Istället för att använda ArbetsbladFunktion.MMULT, kan du använda VBA för att tillämpa MMULT -funktionen på en cell med FormulaArray metod.

123 SubinsatsMMULT ()Område ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"Avsluta Sub

Lägg märke till att nu när kalkylarket fylls ut används en formel i cellerna.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave