Ten samouczek pokaże Ci, jak utworzyć macierz za pomocą tablicy w VBA.
Macierz to prostokątna tablica liczb z taką samą liczbą wierszy i kolumn. Macierz można utworzyć w VBA, wypełniając zmienne tablicowe i używając pętli VBA.
Tworzenie macierzy w VBA
123456789101112131415 | Sub UtwórzSimpleMatrix()Dim matrix() jako liczba całkowitaDim x, i, j, k jako liczba całkowita'ponownie przyciemnij rozmiar tablicyMacierz ReDim (1 do 3, 1 do 3) jako liczba całkowitax = 1Dla i = 1 do 3Dla j = 1 do 3macierz(i,j) = xx = (x + 1)Następny jDalej ja' zwróć wynik do arkusza za jednym razemZakres("A1:C3") = macierzNapis końcowy |
Uruchomienie powyższej procedury zwróci prostą macierz do zakresu („A1:C3”) do arkusza roboczego.
Konwertuj wektor jednorzędowy na macierz
Rozważ kolumnę liczb poniżej. Na pewnym etapie możesz chcieć przekonwertować kolumnę liczb na macierz.
Korzystając z poniższej funkcji możemy stworzyć macierz z listy liczb.
123456789101112131415161718192021 | Funkcja Create_Matrix (Vector_Range jako zakres, No_Of_Cols_in_output jako liczba całkowita, liczba_of_Rows_in_output jako liczba całkowita) jako wariantWymnij tablicę temp. (1 do liczby kolumn na wyjściu, od 1 do liczby wierszy na wyjściu)Dim No_Of_Elements_In_Vector jako liczba całkowitaDim Col_Count jako liczba całkowita, Row_Count jako liczba całkowitaNo_Of_Elements_In_Vector = Zasięg_wektora.Liczba wierszy„Wyeliminuj warunki NULL”Jeśli zakres_wektora jest niczym, wyjdź z funkcjiJeśli No_Of_Cols_in_output = 0 to wyjdź z funkcjiJeśli liczba_rzędów_w_wyjściu = 0, to wyjdź z funkcjiJeśli No_Of_Elements_In_Vector = 0 to zakończ funkcjęDla Col_Count = 1 do No_Of_Cols_in_outputDla licznika_wierszy = 1 do liczby rzędów w_wyjściuTablica_temp(Liczba_kolumn, Liczba_wierszów) = Zasięg_wektora.Komórki(((Liczba_rzędów_w_wyjściu) * (Liczba_kolumn - 1) + Liczba_wierszów), 1)Liczba_następnych wierszyNastępny Col_CountUtwórz_Macierz = Temp_ArrayKoniec funkcji |
Możemy utworzyć macierz w naszym arkuszu Excel, wywołując powyższą funkcję.
123 | Sub ConvertToMatrix()Zakres("C1:H2") = Utwórz_Macierz(Zakres("A1:A10"), 2, 6)Napis końcowy |
Konwertuj macierz na wektor jednorzędowy
Alternatywnie możesz chcieć przekonwertować macierz na pojedynczy wiersz. Rozważ poniższą macierz.
Korzystając z poniższej funkcji, możemy przekonwertować to na jednowymiarową tablicę.
12345678910111213141516171819202122 | Funkcja Utwórz_wektor (zakres_macierzy jako zakres) jako wariantDim liczba_kolumn jako liczba całkowita, liczba_rzędów jako liczba całkowitaDim i jako liczba całkowitaDim j jako liczba całkowita'podnieś wiersze i kolumny z macierzyNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (liczba_kolumn * liczba_wierszów)„Wyeliminuj warunki NULL”Jeśli Matrix_Range to nic, to wyjdź z funkcjiJeśli No_of_Cols = 0, Wyjdź z funkcjiJeśli No_Of_Rows = 0, to zakończ funkcję'przeprowadź pętlę przez tablicę - pierwszy elementDla j = 1 To No_Of_Rows'teraz przejdź przez drugi elementDla i = 0 To No_of_Cols - 1'przypisz do tymczasowej tablicy jednowymiarowejTablica_Temp((i * Liczba_wierszy) + j) = Zakres_Macierzy.Komórki(j, i + 1)Dalej jaNastępny jUtwórz_Wektor = Tablica_TempKoniec funkcji |
Możemy teraz wywołać tę funkcję, korzystając z poniższej procedury.
1234567891011 | Sub Generuj wektor()Dim Vector() jako wariantDim k jako liczba całkowitaDim liczba_elementów'pobierz tablicęVector = Utwórz_Wektor(Arkusze("Arkusz1").Zakres("A1:D5"))'przeprowadź pętlę przez tablicę i wypełnij arkuszDla k = 0 To UBound(Vector) - 1Arkusze("Arkusz1").Range("G1").Offset(k, 0).Value = Vector(k + 1)Następna kNapis końcowy |
Ta procedura zwróci następujący wynik.
Używanie WorksheetFunction.MMULT do tworzenia macierzy macierzy
Rozważ poniższy arkusz kalkulacyjny.
Możemy skorzystać z poniższej procedury, aby obliczyć kwotę odsetek dla powyższej siatki na podstawie stopy procentowej i kwoty, którą osoba chce pożyczyć.
123456789101112 | Użyj MMULT()Dim rngIntRate jako zakresDim rngAmtLoan As RangeDim Result() jako wariant'wypełnij nasz asortyment obiektówUstaw rngIntRate = Zakres("B4:B9")Ustaw rngAmtLoan = Zakres("C3:H3")'użyj formuły MMULT do wypełnienia tablicy wynikówWynik = WorksheetFunction.MMult(rngIntRate, rngAmtLoan)'wypełnij arkuszZakres("C4:H9") = WynikNapis końcowy |
Zauważysz w powyższym arkuszu, że powyższa procedura wypełnia komórki wartościami, a nie formułami – patrz C4 na powyższej grafice – ma w sobie wartość 200, a nie formułę. Używając Funkcja arkusza roboczego Metoda zawsze zwraca do arkusza wartość statyczną, a nie formułę. Oznacza to, że w przypadku zmiany oprocentowania lub kwoty kredytu odpowiednie wartości w wypełnianej macierzy NIE BĘDZIE reszta.
Zamiast używać Arkusz roboczyFunkcja.MMULT, możesz użyć VBA, aby zastosować funkcję MMULT do komórki za pomocą FormułaArray metoda.
123 | Wstaw MMULT()Zakres("C4:H9").FormulaArray = "=MMULT(B4:B9;C3:H3)"Napis końcowy |
Zauważ, że teraz, gdy arkusz kalkulacyjny jest wypełniany, w komórkach używana jest formuła.