Ma trận VBA - Tạo và hơn thế nữa

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 ô.

Bạn sẽ giúp sự phát triển của trang web, chia sẻ trang web với bạn bè

wave wave wave wave wave