Nhân ma trận gặp rắc rối

Liên hệ QC

Cai Bang 199x

Thành viên mới
Tham gia
17/1/20
Bài viết
2
Được thích
0
Chào buổi sáng các bác,
Em có vài rắc rối với con ma trận này
Rắc rối 1: Em đang nhân ma trận mà gặp rắc rối là kết thúc vòng for rồi mà nó vẫn tự nhân thêm 2 ma trận nữa, phần code em không biết đặt điều kiện nào cho nó dừng lại được.
Rắc rối 2 : khi kết thúc quá trình nhân rồi em muốn lấy kết quả phép nhân cuối cùng C10' = C10xC9 hiển thị tại 2 vị trí đầu và cuối của sheet đấy ạ ( các bác mở file lên thấy ngay.
Module em cần sự giúp đỡ là cái Matrix đấy ạ!
 

File đính kèm

  • Fang.xlsm
    55.2 KB · Đọc: 9
Thay đoạn For i ... Next i bằng đoạn này
Mã:
    Dim aMatrix() As Variant, aD As Variant, DD(1 To 4, 1 To 1) As Variant
    ReDim aMatrix(0 To n)
    ReDim aD(0 To n)
    For i = 1 To n
        aMatrix(i) = Range("C" & ((i - 1) * 7 + 9)).Resize(4, 4).Value
        DD(1, 1) = "u" & i
        DD(2, 1) = ChrW(966) & i
        DD(3, 1) = "M" & i
        DD(4, 1) = "Q" & i
        aD(i) = DD
    Next
    For i = 2 To n
        Range("H" & ((i - 1) * 7 + 9)).Resize(4, 4).Value = Application.WorksheetFunction.MMult(aMatrix(i), aMatrix(i - 1))
        Range("L" & ((i - 1) * 7 + 9)).Resize(4).Value = aD(i)
    Next
    Range("H9").Resize(4, 4).Value = Range("H" & ((n - 1) * 7 + 9)).Resize(4, 4).Value
    Range("L9").Resize(4).Value = aD(1)
 
Chào buổi sáng các bác,
Em có vài rắc rối với con ma trận này
Rắc rối 1: Em đang nhân ma trận mà gặp rắc rối là kết thúc vòng for rồi mà nó vẫn tự nhân thêm 2 ma trận nữa, phần code em không biết đặt điều kiện nào cho nó dừng lại được.
Rắc rối 2 : khi kết thúc quá trình nhân rồi em muốn lấy kết quả phép nhân cuối cùng C10' = C10xC9 hiển thị tại 2 vị trí đầu và cuối của sheet đấy ạ ( các bác mở file lên thấy ngay.
Module em cần sự giúp đỡ là cái Matrix đấy ạ!
Chạy code
Mã:
Sub Matrix()
  Dim ThamSo(1 To 4, 1 To 1)
  Dim i&, ik&, ik0&, N&, fRow&
  Const dRow& = 7

  ThamSo(1, 1) = "u":  ThamSo(2, 1) = ChrW(966)
  ThamSo(3, 1) = "M":  ThamSo(4, 1) = "Q"
  With Sheets("MT")
    N = .Cells(4, 2)
    fRow = 9
    For i = 1 To N
      If i = 1 Then
        ik = fRow + (N - 1) * dRow
      Else
        fRow = fRow + dRow
        ik = fRow
      End If
      ik0 = ik - dRow
      .Range("H" & fRow).Resize(4, 4) = Application.MMult(.Range("C" & ik0).Resize(4, 4), .Range("C" & ik).Resize(4, 4))
      For r = 1 To 4
        .Range("L" & fRow + r - 1) = ThamSo(r, 1) & i
      Next r
    Next i
  End With
End Sub
 
Lần chỉnh sửa cuối:
hamSo(1, 1) = "u": ThamSo(2, 1) = ChrW(966) ThamSo(3, 1) = "M": ThamSo(4, 1) = "Q"
Chạy code
Mã:
Sub Matrix()
  Dim ThamSo(1 To 4, 1 To 1)
  Dim i&, ik&, ik0&, N&, fRow&
  Const dRow& = 7

  ThamSo(1, 1) = "u":  ThamSo(2, 1) = ChrW(966)
  ThamSo(3, 1) = "M":  ThamSo(4, 1) = "Q"
  With Sheets("MT")
    N = .Cells(4, 2)
    fRow = 9
    For i = 1 To N
      If i = 1 Then
        ik = fRow + (N - 1) * dRow
      Else
        fRow = fRow + dRow
        ik = fRow
      End If
      ik0 = ik - dRow
      .Range("H" & fRow).Resize(4, 4) = Application.MMult(.Range("C" & ik0).Resize(4, 4), .Range("C" & ik).Resize(4, 4))
      For r = 1 To 4
        .Range("L" & fRow + r - 1) = ThamSo(r, 1) & i
      Next r
    Next i
  End With
End Sub
em cảm ơn ạ, chạy được rồi
Bài đã được tự động gộp:

Thay đoạn For i ... Next i bằng đoạn này
Mã:
    Dim aMatrix() As Variant, aD As Variant, DD(1 To 4, 1 To 1) As Variant
    ReDim aMatrix(0 To n)
    ReDim aD(0 To n)
    For i = 1 To n
        aMatrix(i) = Range("C" & ((i - 1) * 7 + 9)).Resize(4, 4).Value
        DD(1, 1) = "u" & i
        DD(2, 1) = ChrW(966) & i
        DD(3, 1) = "M" & i
        DD(4, 1) = "Q" & i
        aD(i) = DD
    Next
    For i = 2 To n
        Range("H" & ((i - 1) * 7 + 9)).Resize(4, 4).Value = Application.WorksheetFunction.MMult(aMatrix(i), aMatrix(i - 1))
        Range("L" & ((i - 1) * 7 + 9)).Resize(4).Value = aD(i)
    Next
    Range("H9").Resize(4, 4).Value = Range("H" & ((n - 1) * 7 + 9)).Resize(4, 4).Value
    Range("L9").Resize(4).Value = aD(1)
em cảm ơn anh, chạy đực rồi
 
Web KT
Back
Top Bottom