VBA Matrix - Създаване и още

Този урок ще ви покаже как да създадете матрица с помощта на масив във VBA.

Матрицата е правоъгълен масив от числа със същото количество редове и колони. Можете да създадете матрица във VBA, като попълните променливите Array и използвате VBA цикли.

Създаване на матрица във VBA

123456789101112131415 Sub CreateSimpleMatrix ()Dim matrix () As IntegerDim x, i, j, k като цяло число'намалете размера на масиваReDim матрица (1 до 3, 1 до 3) като цяло числоx = 1За i = 1 до 3За j = 1 до 3матрица (i, j) = xx = (x + 1)Следващ jСледва i'връщане на резултата на лист наведнъжДиапазон ("A1: C3") = матрицаEnd Sub

Изпълнението на горната процедура ще върне проста матрица в Range („A1: C3“) във вашия работен лист.

Преобразувайте вектор от един ред в матрица

Помислете за колоната с числа по -долу. Може на един етап да пожелаете да преобразувате колона от числа в матрица.

Използвайки долната функция, можем да създадем матрица от списъка с числа.

123456789101112131415161718192021 Функция Create_Matrix (Vector_Range As Range, No_Of_Cols_in_output As Integer, No_of_Rows_in_output As Integer) Като вариантReDim Temp_Array (1 до No_Of_Cols_in_output, 1 To 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„Премахване на условията NULLАко Vector_Range не е нищо, излезте от функциятаАко No_Of_Cols_in_output = 0 След това излезте от функциятаАко No_of_Rows_in_output = 0 След това излезте от функциятаАко No_Of_Elements_In_Vector = 0, тогава излезте от функциятаFor Col_Count = 1 Към No_Of_Cols_in_outputЗа Row_Count = 1 към No_of_Rows_in_outputTemp_Array (Col_Count, Row_Count) = Vector_Range.Cells ((((No_of_Rows_in_output) * (Col_Count - 1) + Ro__Count), 1)Следващ Row_CountСледващ Col_CountCreate_Matrix = Temp_ArrayКрайна функция

Можем да създадем матрицата в нашия лист на Excel, като извикаме функцията по -горе.

123 Sub ConvertToMatrix ()Диапазон ("C1: H2") = Create_Matrix (Обхват ("A1: A10"), 2, 6)End Sub

Преобразувайте матрица в вектор с един ред

Друга възможност е да преобразувате матрица в единичен ред. Помислете за матрицата по -долу.

Използвайки долната функция, можем да преобразуваме това в масив с едно измерение.

12345678910111213141516171819202122 Функция Create_Vector (Matrix_Range As Range) Като вариантDim No_of_Cols As Integer, No_Of_Rows As IntegerDim i As IntegerDim j като цяло число'вземете редовете и колоните от матрицатаNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (No_of_Cols * No_Of_Rows)„Премахване на условията NULLАко Matrix_Range не е нищо, излезте от функциятаАко No_of_Cols = 0, тогава излезте от функциятаАко No_Of_Rows = 0, тогава излезте от функцията'цикъл през масива - първият елементЗа j = 1 До No_Of_Rows'сега цикъл през втория елементЗа i = 0 За No_of_Cols - 1'присвояване на временен масив с едно измерениеTemp_Array ((i * No_Of_Rows) + j) = Matrix_Range.Cells (j, i + 1)Следва iСледващ jCreate_Vector = Temp_ArrayКрайна функция

Вече можем да извикаме тази функция, като използваме процедурата по -долу.

1234567891011 Sub GenerateVector ()Dim Vector () Като вариантDim k като цяло числоDim No_of_Elements'вземете масиваVector = Create_Vector (Sheets ("Sheet1"). Range ("A1: D5"))'цикъл през масива и попълване на листаЗа k = 0 Към UBound (вектор) - 1Листове ("Sheet1"). Диапазон ("G1"). Отместване (k, 0). Значение = вектор (k + 1)Следващ кEnd Sub

Тази процедура ще върне следния резултат.

Използване на WorksheetFunction.MMULT за създаване на матричен масив

Помислете за следната електронна таблица.

Можем да използваме процедурата по -долу, за да изчислим размера на лихвата за горната мрежа въз основа на лихвения процент и сумата, която лицето иска да вземе назаем.

123456789101112 Помощно използване MMULT ()Затъмнете rngIntRate като диапазонDim rngAmtLoan As RangeDim Result () Като вариант'попълнете нашите обекти на диапазонЗадайте rngIntRate = Диапазон ("B4: B9")Задайте rngAmtLoan = Диапазон ("C3: H3")'използвайте формулата MMULT, за да попълните масива с резултатиРезултат = Работен лист Функция.MMult (rngIntRate, rngAmtLoan)'попълнете листаОбхват ("C4: H9") = РезултатEnd Sub

Ще забележите в горния лист, че горепосочената процедура попълва клетките със стойности, а не с формули - вижте C4 в горната графика - в нея има стойност 200, а не формула. Използвайки Работен лист Функция метод винаги връща статична стойност на работния лист, а не формула. Това означава, че ако лихвеният процент или размерът на заема се променят, съответните стойности в попълнената матрица НЯМА ДА промяна.

Вместо да използвате Работен лист Функция.MMULT, можете да използвате VBA, за да приложите функцията MMULT към клетка, използвайки FormulaArray метод.

123 Sub InsertMMULT ()Диапазон ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"End Sub

Забележете, че сега, когато електронната таблица е попълнена, в клетките се използва формула.

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave