VBA Matrix - Lag og mer

Denne opplæringen viser deg hvordan du lager en matrise ved hjelp av en matrise i VBA.

En matrise er en rektangulær rekke med tall med samme mengde rader og kolonner. Du kan lage en matrise i VBA ved å fylle ut Array -variabler og bruke VBA Loops.

Opprette en matrise i VBA

123456789101112131415 Sub CreateSimpleMatrix ()Dim matrise () Som heltallDim x, i, j, k Som heltalldim ned størrelsen på matrisenReDim -matrise (1 til 3, 1 til 3) som heltallx = 1For i = 1 til 3For j = 1 til 3matrise (i, j) = xx = (x + 1)Neste jNeste jeg'returnere resultatet til arket på en gangOmråde ("A1: C3") = matriseSlutt Sub

Hvis du kjører prosedyren ovenfor, returneres en enkel matrise til område ("A1: C3") til regnearket.

Konverter enkel radvektor til en matrise

Tenk på kolonnen med tall nedenfor. Du kan på et tidspunkt ønske å konvertere en kolonne med tall til en matrise.

Ved å bruke funksjonen nedenfor kan vi lage en matrise fra listen over tall.

123456789101112131415161718192021 Funksjon 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 heltallDim Col_Count As Integer, Row_Count As IntegerNo_Of_Elements_In_Vector = Vector_Range.Rows.CountEliminer NULL -betingelserHvis Vector_Range ikke er noe, avslutt deretter funksjonenHvis No_Of_Cols_in_output = 0 Avslutt deretter funksjonenHvis No_of_Rows_in_output = 0 Avslutt deretter funksjonenHvis No_Of_Elements_In_Vector = 0 Avslutt deretter funksjonenFor 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)Neste rad_tellingNeste Col_CountCreate_Matrix = Temp_ArraySluttfunksjon

Vi kan lage matrisen i vårt Excel -ark ved å kalle funksjonen ovenfor.

123 Sub ConvertToMatrix ()Område ("C1: H2") = Create_Matrix (område ("A1: A10"), 2, 6)Slutt Sub

Konverter en matrise til en enkeltradvektor

Alternativt kan det være lurt å konvertere en matrise til en enkelt rad. Vurder matrisen nedenfor.

Ved å bruke funksjonen nedenfor kan vi konvertere dette til et enkelt dimensjonsarray.

12345678910111213141516171819202122 Funksjon Create_Vector (Matrix_Range As Range) som variantDim No_of_Cols As Integer, No_Of_Rows As IntegerDim i As IntegerDim j Som heltall'plukk opp radene og kolonnene fra matrisenNo_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 noe, avslutt deretter funksjonenHvis No_of_Cols = 0 Avslutt deretter funksjonenHvis No_Of_Rows = 0 Avslutt deretter funksjonen'sløyfe gjennom matrisen - det første elementetFor j = 1 Til No_Of_Rows'går nå gjennom det andre elementetFor i = 0 Til No_of_Cols - 1'tilordne en midlertidig matrise med én dimensjonTemp_Array ((i * No_Of_Rows) + j) = Matrix_Range.Cells (j, i + 1)Neste jegNeste jCreate_Vector = Temp_ArraySluttfunksjon

Vi kan nå kalle denne funksjonen ved å følge fremgangsmåten nedenfor.

1234567891011 Sub GenerateVector ()Dim Vector () Som variantDim k Som heltallDim No_of_Elements'få matrisenVector = Create_Vector (Sheets ("Sheet1"). Range ("A1: D5"))'gå gjennom matrisen og fyll ut arketFor k = 0 Til UBound (vektor) - 1Ark ("Ark1"). Område ("G1"). Forskyvning (k, 0) .Value = Vector (k + 1)Neste kSlutt Sub

Denne prosedyren gir følgende resultat.

Bruke WorksheetFunction.MMULT til å lage en Matrix Array

Vurder følgende regneark.

Vi kan bruke fremgangsmåten nedenfor for å beregne rentebeløpet for nettet over basert på renten og beløpet personen ønsker å låne.

123456789101112 DelbrukMMULT ()Dim rngIntRate As RangeDim rngAmtLoan As RangeDim Resultat () Som variant'fyller ut rekkeviddeobjekterSett rngIntRate = Range ("B4: B9")Sett rngAmtLoan = Range ("C3: H3")'bruk MMULT -formelen for å fylle resultatmatrisenResultat = WorksheetFunction.MMult (rngIntRate, rngAmtLoan)'fyll ut arketOmråde ("C4: H9") = ResultatSlutt Sub

Du vil merke i arket ovenfor at prosedyren ovenfor fyller cellene med verdier i stedet for formler - se C4 i grafikken ovenfor - den har verdien 200 i den, ikke en formel. Bruker Arbeidsark Funksjon metode returnerer alltid en statisk verdi til regnearket og ikke en formel. Dette betyr at hvis renten eller lånebeløpet endres, vil de tilsvarende verdiene i den utfylte matrisen VIL IKKE endring.

I stedet for å bruke RegnearkFunksjon.MMULT, kan du bruke VBA til å bruke MMULT -funksjonen på en celle ved hjelp av FormulaArray metode.

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

Legg merke til at nå når regnearket er fylt ut, brukes en formel i cellene.

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave