Hỏi về cách sử dụng hàm MInverse trong VBA

  • Thread starter Thread starter DART2
  • Ngày gửi Ngày gửi
Liên hệ QC

DART2

Thành viên mới
Tham gia
15/10/08
Bài viết
13
Được thích
0
Xin chào các bạn!!
Hiện tại mình đang gặp vấn đề trong việc tìm cách dùng hàm MInverse trong VBA để tìm ma trận nghịch đảo. không biết hàm MInverse có thể tìm ma trận nghịch đảo của 1 array VBA hay là chỉ tìm được ma trận nghịch đảo của array(vùng range) trong excel thôi?
Minh đang nghĩ đến phương án là viết từng phần tử trong array VBA ra từng ô trong excel, set range rồi dùng MInverse để tìm ma trận nghịch đảo, sau cùng là tạo array VBA thu về kết quả của từng ô trong excel. Tuy nhiên mình thấy cách này hơi thủ công quá, không biết có cao nhân nào ra tay giúp đỡ mình không?
Cám ơn mọi người đã đọc bài viết của mình.
 
Bạn xem code này:

PHP:
Sub InverseMatrix()
Dim Matrix1, Matrix2
    Matrix1 = Range("b2:d4")
    Matrix2 = Application.MInverse(Matrix1)
    For i = 1 To 3
        For j = 1 To 3
            Matrix2(i, j) = Matrix2(i, j) * 2
        Next
    Next
    Range("b6:d8") = Matrix2
End Sub
Khi chạy, code sẽ tính ma trận nghịch đảo của ma trận 3 x 3 ban đầu lấy từ vùng B2:D4. Ta có thể xử lý tiếp ma trận thứ 2 thí dụ nhân mọi phần tử Matrix2(i, j) với 2.
(Trong code tôi gán xuống sheet để kiểm tra lại với hàm của Excel).
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bạn đã quan tâm, nhưng có lẽ bạn đã hiểu sai ý của mình rồi!! Mình muốn tìm nghịch đảo của ma trận dạng array trong VBA, chứ không phải là dạng array được thu về trên cells của Excel!. Ví dụ như nếu bạn sử dụng hàm MInverse trong trường hợp này thì nó sẽ bị lỗi
....
....
Dim Matrix1(2,2) as Double
Dim Matrix2 as Variant
Matrix(0,0)=1
Matrix(0,1)=2
Matrix(0,2)=5
Matrix(1,1)=8
Matrix(1,2)=5
Matrix(1,3)=6
Matrix(2,1)=2
Matrix(2,2)=5
Matrix(2,3)=3
Matrix2=Application.MInverse(Matrix)
........
........
Trong trường hợp này Matrix của mình là dạng array của VBA, không dính gì tới excel hết. Có phải trong trường hợp này thì hàm MInverse không dùng được không?
 
Upvote 0
Bạn xem code thế nào ấy, chứ 2 matrix trong code của tôi là mảng (Array) của VBA đàng hoàng. Tôi chỉ dùng dữ liệu trên sheet để gán vào và lấy ra thôi. Nếu không lấy ra sheet, làm sao bạn kiểm tra nó có tồn tại?

Bạn thử code sau, không lấy dữ liệu trên sheet nữa:

PHP:
Sub InverseMatrix()
Dim Matrix1, Matrix2
ReDim Matrix1(1 To 3, 1 To 3)
    Matrix1(1, 1) = 2
    Matrix1(1, 2) = 3
    Matrix1(1, 3) = 2
    Matrix1(2, 1) = 2
    Matrix1(2, 2) = 4
    Matrix1(2, 3) = 3
    Matrix1(3, 1) = 4
    Matrix1(3, 2) = 6
    Matrix1(3, 3) = 2
    Range("b2:d4") = Matrix1
    Matrix2 = Application.MInverse(Matrix1)
    Range("f6:h8") = Matrix2
    For i = 1 To 3
        For j = 1 To 3
            Matrix2(i, j) = Matrix2(i, j) * 2
        Next
    Next
    Range("b6:d8") = Matrix2
End Sub

Code của bạn (những chỗ tô đỏ) không lỗi mới là lạ:
Mã:
Dim Matrix[B][COLOR=red]1[/COLOR][/B](2,2) as Double
 Dim Matrix2 as Variant
 Matrix(0,0)=1
 Matrix(0,1)=2
 Matrix(0,2)=5
 Matrix(1,1)=8
 Matrix(1,2)=5
 Matrix(1,[B][COLOR=red]3[/COLOR][/B])=6
 Matrix(2,1)=2
 Matrix(2,2)=5
 Matrix(2,[B][COLOR=red]3[/COLOR][/B])=3
 Matrix2=Application.MInverse(Matrix)
 
Lần chỉnh sửa cuối:
Upvote 0
Àh, xin lỗi bạn thật! Mình nhầm ! Cám ơn bạn nhiều !
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom