Hướng dẫn này sẽ chỉ cho bạn cách tạo ma trận bằng Mảng trong VBA.
Ma trận là một dãy số hình chữ nhật có cùng số lượng Hàng và Cột. Bạn có thể tạo ma trận trong VBA bằng cách điền các biến Mảng và sử dụng Vòng lặp VBA.
Tạo ma trận trong VBA
123456789101112131415 | Sub CreateSimpleMatrix ()Ma trận mờ () Dưới dạng số nguyênDim x, i, j, k As Integer're-dim kích thước của mảngMa trận ReDim (1 đến 3, 1 đến 3) dưới dạng số nguyênx = 1Đối với i = 1 đến 3Đối với j = 1 đến 3ma trận (i, j) = xx = (x + 1)Tiếp theo jTiếp theo tôi'trả kết quả sang trang tính trong một lầnRange ("A1: C3") = ma trậnKết thúc Sub |
Chạy quy trình trên sẽ trả về một ma trận đơn giản cho Phạm vi (“A1: C3”) vào trang tính của bạn.
Chuyển đổi vectơ hàng đơn thành ma trận
Hãy xem xét cột số bên dưới. Ở một số giai đoạn, bạn có thể muốn chuyển một cột số thành ma trận.
Sử dụng hàm dưới đây, chúng ta có thể tạo một ma trận từ danh sách các số.
123456789101112131415161718192021 | Hàm Create_Matrix (Vector_Range As Range, No_Of_Cols_in_output As Integer, No_of_Rows_in_output As Integer) Dưới dạng biến thểReDim Temp_Array (1 đến No_Of_Cols_in_output, 1 đến No_of_Rows_in_output)Dim No_Of_Elements_In_Vector thành số nguyênDim Col_Count dưới dạng số nguyên, Row_Count dưới dạng số nguyênNo_Of_Elements_In_Vector = Vector_Range.Rows.Count'Loại bỏ điều kiện NULLNếu Vector_Range không có gì thì hãy thoát khỏi chức năngIf No_Of_Cols_in_output = 0 Then Exit FunctionIf No_of_Rows_in_output = 0 Then Exit FunctionIf No_Of_Elements_In_Vector = 0 Then Exit FunctionĐối với Col_Count = 1 Tới No_Of_Cols_in_outputĐối với Row_Count = 1 Tới 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 tiếp theoCol_Count tiếp theoCreate_Matrix = Temp_ArrayChức năng kết thúc |
Chúng ta có thể tạo ma trận trong trang tính Excel của mình bằng cách gọi hàm trên.
123 | Sub ConvertToMatrix ()Phạm vi ("C1: H2") = Create_Matrix (Phạm vi ("A1: A10"), 2, 6)Kết thúc Sub |
Chuyển đổi ma trận thành vectơ hàng đơn
Ngoài ra, bạn có thể muốn chuyển đổi Ma trận thành một hàng. Hãy xem xét Ma trận dưới đây.
Sử dụng hàm bên dưới, chúng ta có thể chuyển nó thành mảng một chiều.
12345678910111213141516171819202122 | Hàm Create_Vector (Matrix_Range As Range) Như một biến thểLàm mờ No_of_Cols dưới dạng số nguyên, No_Of_Rows dưới dạng số nguyênDim i As IntegerDim j As Integer'chọn các hàng và cột từ ma trậnNo_of_Cols = Matrix_Range.Columns.CountNo_Of_Rows = Matrix_Range.Rows.CountReDim Temp_Array (No_of_Cols * No_Of_Rows)'Loại bỏ điều kiện NULLNếu Matrix_Range không có gì thì hãy thoát khỏi chức năngIf No_of_Cols = 0 Then Exit FunctionIf No_Of_Rows = 0 Then Exit Function'lặp qua mảng - phần tử đầu tiênĐối với j = 1 Đến No_Of_Rows'bây giờ lặp qua phần tử thứ haiFor i = 0 To No_of_Cols - 1'gán cho một mảng tạm thời một thứ nguyênTemp_Array ((i * No_Of_Rows) + j) = Matrix_Range.Cells (j, i + 1)Tiếp theo tôiTiếp theo jCreate_Vector = Temp_ArrayChức năng kết thúc |
Bây giờ chúng ta có thể gọi hàm này bằng cách sử dụng quy trình dưới đây.
1234567891011 | Sub GenerateVector ()Dim Vector () As VariantDim k As IntegerDim No_of_Elements'lấy mảngVector = Create_Vector (Trang tính ("Trang tính1"). Phạm vi ("A1: D5"))'lặp qua mảng và điền trang tínhĐối với k = 0 Đến UBound (Vectơ) - 1Trang tính ("Trang 1"). Phạm vi ("G1"). Khoảng cách (k, 0) .Value = Véc tơ (k + 1)Tiếp theo kKết thúc Sub |
Quy trình này sẽ trả về kết quả sau.
Sử dụng WorksheetFunction.MMULT để tạo Mảng ma trận
Hãy xem xét bảng tính sau.
Chúng ta có thể sử dụng quy trình dưới đây để tính số tiền lãi cho lưới điện trên dựa trên lãi suất và số tiền người đó muốn vay.
123456789101112 | Sử dụng phụMMULT ()Dim rngIntRate As RangeDim rngAmtLoan As RangeKết quả mờ () Dưới dạng biến thể'điền các đối tượng phạm vi của chúng tôiĐặt rngIntRate = Range ("B4: B9")Đặt rngAmtLoan = Range ("C3: H3")'sử dụng công thức MMULT để điền vào mảng kết quảKết quả = WorksheetFunction.MMult (rngIntRate, rngAmtLoan)'điền trang tínhRange ("C4: H9") = Kết quảKết thúc Sub |
Bạn sẽ nhận thấy trong trang tính ở trên, quy trình ở trên điền vào các ô có giá trị chứ không phải công thức - xem C4 trong hình trên - nó có giá trị 200, không phải công thức. Sử dụng WorksheetFunction phương thức luôn trả về một giá trị tĩnh cho trang tính chứ không phải một công thức. Điều này có nghĩa là nếu lãi suất hoặc số tiền vay thay đổi, các giá trị tương ứng trong ma trận điền vào SẼ KHÔNG thay đổi.
Thay vì sử dụng WorksheetFunction.MMULT, bạn có thể sử dụng VBA để áp dụng Hàm MMULT cho một ô bằng cách sử dụng FormulaArray phương pháp.
123 | Chèn phụMMULT ()Phạm vi ("C4: H9"). FormulaArray = "= MMULT (B4: B9, C3: H3)"Kết thúc Sub |
Lưu ý rằng bây giờ khi bảng tính được điền, một công thức sẽ được sử dụng trong các ô.