VBA-matrix - Maken en meer

Deze tutorial laat je zien hoe je een matrix maakt met behulp van een array in VBA.

Een matrix is ​​een rechthoekige reeks getallen met hetzelfde aantal rijen en kolommen. U kunt een matrix in VBA maken door arrayvariabelen in te vullen en VBA-loops te gebruiken.

Een matrix maken in VBA

123456789101112131415 Sub CreateSimpleMatrix()Dim matrix() Als geheel getalDim x, i, j, k Als geheel getal'de grootte van de array opnieuw dimmen'ReDim-matrix (1 tot 3, 1 tot 3) als geheel getalx = 1Voor i = 1 tot 3Voor j = 1 tot 3matrix(i, j) = xx = (x + 1)volgende jvolgende i' resultaat in één keer terug naar bladBereik ("A1:C3") = matrixEinde sub

Als u de bovenstaande procedure uitvoert, wordt een eenvoudige matrix naar Range ("A1: C3") naar uw werkblad geretourneerd.

Converteer enkele rijvector naar een matrix

Bekijk de kolom met getallen hieronder. Het kan zijn dat u op een bepaald moment een kolom met getallen naar een matrix wilt converteren.

Met behulp van de onderstaande functie kunnen we een matrix maken van de lijst met getallen.

123456789101112131415161718192021 Functie Create_Matrix (Vector_Range As Range, No_Of_Cols_in_output As Integer, No_of_Rows_in_output As Integer) Als VariantReDim Temp_Array (1 tot No_Of_Cols_in_output, 1 tot No_of_Rows_in_output)Dim No_Of_Elements_In_Vector als geheel getalDim Col_Count As Integer, Row_Count As IntegerNo_Of_Elements_In_Vector = Vector_Range.Rows.Count'Elimineren NULL-voorwaarden'Als Vector_Range niets is, sluit dan de functie afAls No_Of_Cols_in_output = 0 dan functie afsluitenAls No_of_Rows_in_output = 0, dan functie verlatenAls No_Of_Elements_In_Vector = 0, sluit functie dan afVoor Col_Count = 1 To No_Of_Cols_in_outputVoor Row_Count = 1 To No_of_Rows_in_outputTemp_Array(Col_Count, Row_Count) = Vector_Range.Cells(((No_of_Rows_in_output) * (Col_Count - 1) + Row_Count), 1)Volgende rij_tellingVolgende Col_CountCreate_Matrix = Temp_ArrayFunctie beëindigen

We kunnen de matrix in ons Excel-blad maken door de bovenstaande functie aan te roepen.

123 Sub ConverterenNaarMatrix()Bereik ("C1:H2") = Create_Matrix(Bereik ("A1:A10"), 2, 6)Einde sub

Converteer een matrix naar een enkele rijvector

U kunt ook een matrix naar een enkele rij converteren. Beschouw de onderstaande matrix.

Met behulp van de onderstaande functie kunnen we dit omzetten in een array met één dimensie.

12345678910111213141516171819202122 Functie Create_Vector (Matrix_Range As Range) As VariantDim No_of_Cols als geheel getal, No_Of_Rows als geheel getalDim ik als geheel getalDim j als geheel getal'haal de rijen en kolommen uit de matrix'No_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (No_of_Cols * No_Of_Rows)'Elimineren NULL-voorwaarden'Als Matrix_Range niets is, sluit dan de functie afAls No_of_Cols = 0, verlaat dan functieAls No_Of_Rows = 0 dan functie verlaten'loop door de array - het eerste element'Voor j = 1 tot No_Of_Rows'loop nu door het tweede element'Voor i = 0 tot No_of_Cols - 1'toewijzen aan een tijdelijke array met één dimensie'Temp_Array((i * No_Of_Rows) + j) = Matrix_Range.Cells(j, i + 1)volgende ivolgende jCreate_Vector = Temp_ArrayFunctie beëindigen

We kunnen deze functie nu aanroepen met de onderstaande procedure.

1234567891011 Sub GenereerVector()Dim Vector() Als VariantDim k Als geheel getalDim No_of_Elements'haal de array'Vector = Create_Vector(Sheets("Blad1").Bereik("A1:D5"))'loop door de array en vul het blad'Voor k = 0 Naar UBound (vector) - 1Bladen ("Blad1"). Bereik ("G1"). Offset (k, 0). Waarde = Vector (k + 1)volgende kEinde sub

Deze procedure geeft het volgende resultaat.

De WorksheetFunction.MMULT gebruiken om een ​​matrixarray te maken

Beschouw het volgende rekenblad.

Via onderstaande procedure kunnen we het rentebedrag voor bovenstaand rooster berekenen op basis van het rentepercentage en het bedrag dat de persoon wil lenen.

123456789101112 SubgebruikMMULT()Dim rngIntRate As RangeDim rngAmtLoan As RangeDim resultaat() als variant'vul ons assortiment objecten'Stel rngIntRate = Bereik ("B4:B9") inStel rngAmtLoan = Bereik ("C3:H3") in'gebruik de MMULT-formule om de resultatenarray te vullen'Resultaat = WerkbladFunctie.MMult(rngIntRate, rngAmtLoan)'vul het blad in'Bereik ("C4:H9") = ResultaatEinde sub

U zult in het bovenstaande blad opmerken dat de bovenstaande procedure de cellen vult met waarden in plaats van formules - zie C4 in de bovenstaande afbeelding - het heeft de waarde 200 erin, geen formule. De … gebruiken WerkbladFunctie methode retourneert altijd een statische waarde naar het werkblad en geen formule. Dit betekent dat als de rente of het leenbedrag verandert, de bijbehorende waarden in de ingevulde matrix ZAL NIET verandering.

In plaats van de WerkbladFunctie.MMULT, kunt u VBA gebruiken om de MMULT-functie op een cel toe te passen met behulp van de FormuleArray methode.

123 Sub invoegenMMULT()Bereik ("C4:H9").FormulaArray = "=MMULT(B4:B9,C3:H3)"Einde sub

Merk op dat wanneer het werkblad nu is ingevuld, er een formule in de cellen wordt gebruikt.

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave