Matrice VBA - Crea e altro

Questo tutorial ti mostrerà come creare una matrice usando un array in VBA.

Una matrice è una matrice rettangolare di numeri con la stessa quantità di righe e colonne. È possibile creare una matrice in VBA popolando le variabili Array e utilizzando VBA Loops.

Creazione di una matrice in VBA

123456789101112131415 Sub CreateSimpleMatrix()Dim matrix() come interoDim x, i, j, k As Integer'ridimensiona la dimensione dell'arrayMatrice ReDim(da 1 a 3, da 1 a 3) As Integerx = 1Per i = da 1 a 3Per j = da 1 a 3matrice(i, j) = xx = (x + 1)Avanti jAvanti io'riporta il risultato sul foglio in una volta solaIntervallo("A1:C3") = matriceFine sottotitolo

L'esecuzione della procedura sopra restituirà una semplice matrice a Range ("A1: C3") nel foglio di lavoro.

Converti un vettore a riga singola in una matrice

Considera la colonna di numeri qui sotto. Ad un certo punto potresti voler convertire una colonna di numeri in una matrice.

Utilizzando la funzione sottostante, possiamo creare una matrice dall'elenco di numeri.

123456789101112131415161718192021 Funzione Create_Matrix(Vector_Range As Range, No_Of_Cols_in_output As Integer, No_of_Rows_in_output As Integer) As VariantReDim Temp_Array(1 a No_Of_Cols_in_output, 1 a No_of_Rows_in_output)Dim No_Of_Elements_In_Vector As IntegerDim Col_Count As Integer, Row_Count As IntegerNo_Of_Elements_In_Vector = Vector_Range.Rows.Count"Elimina condizioni NULL"Se Vector_Range non è nulla, quindi esci dalla funzioneSe No_Of_Cols_in_output = 0 Allora esci dalla funzioneSe No_of_Rows_in_output = 0 allora esci dalla funzioneSe No_Of_Elements_In_Vector = 0 allora esci dalla funzionePer Col_Count = 1 a No_Of_Cols_in_outputPer Row_Count = 1 a No_of_Rows_in_outputTemp_Array(Col_Count, Row_Count) = Vector_Range.Cells(((No_of_Rows_in_output) * (Col_Count - 1) + Row_Count), 1)Riga_conteggio successivaCol_Count successivoCreate_Matrix = Temp_ArrayFine funzione

Possiamo creare la matrice nel nostro foglio Excel, chiamando la funzione sopra.

123 Sub ConvertToMatrix()Intervallo("C1:H2") = Create_Matrix(Intervallo("A1:A10"), 2, 6)Fine sottotitolo

Converti una matrice in un vettore a riga singola

In alternativa, potresti voler convertire una matrice in una riga singola. Considera la matrice di seguito.

Usando la funzione seguente, possiamo convertirlo in un array a dimensione singola.

12345678910111213141516171819202122 Funzione Create_Vector(Matrix_Range As Range) As VariantDim No_of_Cols As Integer, No_Of_Rows As IntegerDim i As IntegerDim j come intero'raccogli le righe e le colonne dalla matriceNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array(No_of_Cols * No_Of_Rows)"Elimina condizioni NULL"Se Matrix_Range non è nulla, allora esci dalla funzioneSe No_of_Cols = 0 allora esci dalla funzioneSe No_Of_Rows = 0 allora esci dalla funzione'loop attraverso l'array - il primo elementoPer j = 1 a No_Of_Rows'ora passa attraverso il secondo elementoPer i = 0 a No_of_Cols - 1'assegna a una matrice temporanea a dimensione singolaTemp_Array((i * No_Of_Rows) + j) = Matrix_Range.Cells(j, i + 1)Avanti ioAvanti jCreate_Vector = Temp_ArrayFine funzione

Ora possiamo chiamare questa funzione usando la procedura seguente.

1234567891011 Sub GeneraVettore()Dim Vector() come varianteDim k As IntegerDim No_of_Elements'ottenere l'arrayVettore = Crea_Vettore(Fogli("Foglio1").Intervallo("A1:D5"))'loop attraverso l'array e popola il foglioPer k = 0 a UBound(Vettore) - 1Fogli("Foglio1").Intervallo("G1").Offset(k, 0).Valore = Vettore(k + 1)Avanti kFine sottotitolo

Questa procedura restituirà il seguente risultato.

Utilizzo di WorksheetFunction.MMULT per creare una matrice di matrici

Considera il seguente foglio di calcolo.

Possiamo utilizzare la procedura seguente per calcolare l'importo degli interessi per la griglia sopra in base al tasso di interesse e all'importo che la persona vuole prendere in prestito.

123456789101112 Uso secondarioMMULT()Dim rngIntRate As RangeDim rngAmtLoan As RangeRisultato debole() come variante'popola la nostra gamma di oggettiImposta rngIntRate = Intervallo ("B4: B9")Imposta rngAmtLoan = Range("C3:H3")'usa la formula MMULT per riempire l'array dei risultatiRisultato = WorksheetFunction.MMult(rngIntRate, rngAmtLoan)'popola il foglioIntervallo("C4:H9") = RisultatoFine sottotitolo

Noterai nel foglio sopra, che la procedura sopra popola le celle con valori anziché formule - vedi C4 nel grafico sopra - ha il valore 200, non una formula. Usando il Foglio di lavoroFunzione Il metodo restituisce sempre un valore statico al foglio di lavoro e non una formula. Ciò significa che se il tasso di interesse o l'importo del prestito cambiano, i valori corrispondenti nella matrice compilata NON modificare.

Invece di usare il Foglio di lavoroFunzione.MMULT, puoi usare VBA per applicare la funzione MMULT a una cella usando il FormulaArray metodo.

123 SottoInserimentoMMULTO()Intervallo ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"Fine sottotitolo

Nota che ora quando il foglio di calcolo viene popolato, nelle celle viene utilizzata una formula.

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave