Матрица VBA - Создание и многое другое

Из этого туториала Вы узнаете, как создать матрицу с помощью массива в VBA.

Матрица - это прямоугольный массив чисел с одинаковым количеством строк и столбцов. Вы можете создать матрицу в VBA, заполнив переменные массива и используя циклы VBA.

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

123456789101112131415 Sub CreateSimpleMatrix ()Матрица Dim matrix () как целое числоDim x, i, j, k как целое число'повторно уменьшите размер массиваМатрица ReDim (от 1 до 3, от 1 до 3) как целое числох = 1Для i = от 1 до 3Для j = от 1 до 3матрица (i, j) = xх = (х + 1)Следующий jДалее я'вернуть результат на лист за один разДиапазон ("A1: C3") = матрицаКонец подписки

Выполнение описанной выше процедуры вернет простую матрицу в диапазон («A1: C3») на ваш рабочий лист.

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

Рассмотрим столбец чисел ниже. На каком-то этапе вы можете захотеть преобразовать числовой столбец в матрицу.

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

123456789101112131415161718192021 Функция Create_Matrix (Vector_Range как диапазон, No_Of_Cols_in_output как целое число, No_of_Rows_in_output как целое число) как вариантReDim Temp_Array (1 в No_Of_Cols_in_output, 1 в No_Of_Rows_in_output)Dim No_Of_Elements_In_Vector как целое числоDim Col_Count как целое число, Row_Count как целоеNo_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, тогда выйти из функцииДля 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) + Row_Count), 1)Следующий Row_CountСледующий Col_CountCreate_Matrix = Temp_ArrayКонечная функция

Мы можем создать матрицу на нашем листе Excel, вызвав функцию выше.

123 Sub ConvertToMatrix ()Диапазон ("C1: H2") = Create_Matrix (Диапазон ("A1: A10"), 2, 6)Конец подписки

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

В качестве альтернативы вы можете преобразовать матрицу в одну строку. Рассмотрим матрицу ниже.

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

12345678910111213141516171819202122 Функция Create_Vector (Matrix_Range как диапазон) как вариантDim No_of_Cols как целое число, No_Of_Rows как целое числоDim i как целое числоDim 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)Далее яСледующий jCreate_Vector = Temp_ArrayКонечная функция

Теперь мы можем вызвать эту функцию, используя процедуру, описанную ниже.

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

Эта процедура вернет следующий результат.

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

Рассмотрим следующую таблицу.

Мы можем использовать приведенную ниже процедуру для расчета суммы процентов для вышеприведенной сетки на основе процентной ставки и суммы, которую человек хочет занять.

123456789101112 Дополнительное использованиеMMULT ()Dim rngIntRate As RangeДиапазон значений Dim rngAmtLoan AsТусклый результат () как вариант'заполняем объекты нашего диапазонаУстановить rngIntRate = Range ("B4: B9")Установить rngAmtLoan = Range ("C3: H3")'используйте формулу MMULT для заполнения массива результатовРезультат = WorksheetFunction.MMult (rngIntRate, rngAmtLoan)'заполнить листДиапазон ("C4: H9") = РезультатКонец подписки

На листе выше вы заметите, что приведенная выше процедура заполняет ячейки значениями, а не формулами - см. C4 на приведенном выше рисунке - в нем указано значение 200, а не формула. С помощью Рабочий лист Метод всегда возвращает статическое значение на рабочий лист, а не формулу. Это означает, что в случае изменения процентной ставки или суммы кредита соответствующие значения в заполненной матрице НЕ БУДУ изменение.

Вместо использования Рабочий листFunction.MMULT, вы можете использовать VBA для применения функции MMULT к ячейке с помощью FormulaArray метод.

123 Sub InsertMMULT ()Диапазон ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"Конец подписки

Обратите внимание, что теперь при заполнении электронной таблицы в ячейках используется формула.

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave