条件が具体的にわからないのですが、以下のように仮定します。
この前提で書いてみたのが以下のVBAです。
1回計算するごとにメッセージボックスを出して、結果を確認できるようにしています。
Sub myMMULT() '変数宣言 Dim myA As Range '行列Aの第1行第1列セル Dim myB As Range '行列Bの第1行第1列セル Dim myC As Range '行列Cの第1行第1列セル Dim l As Long 'Aの行数=Cの行数 Dim m As Long 'Aの列数=Bの行数 Dim n As Long 'Bの列数=Cの列数 Dim lLoopTimes '繰り返し回数 Dim i As Long 'ループ変数 '******初期値の設定:条件に応じて変更してください。****** Set myA = Range("Sheet1!A1") Set myB = Range("Sheet2!A1") Set myC = Range("Sheet3!A1") l = 1 m = 1 n = 1 lLoopTimes = 10 'とりあえずループは10回としておきます… '***************************************************** '行列計算のループ For i = 1 To lLoopTimes myGetMatrix(myC, l, n).FormulaArray _ = WorksheetFunction.MMult( _ myGetMatrix(myA, l, m), _ myGetMatrix(myB, m, n)) '続行可否の問い合わせ:OKが押されたら続行。 If MsgBox("OK?", vbOKCancel) <> vbOK Then Exit For '行数または列数を増やす(不要なものをコメントアウト) l = l + 1 m = m + 1 n = n + 1 Next End Sub '関数 myGetMatrix:行列範囲のRangeオブジェクトを返す Private Function myGetMatrix(myLeftTop As Range, myRow As Long, myColumn As Long) As Range Set myGetMatrix = Range(myLeftTop, myLeftTop.Offset(myRow - 1, myColumn - 1)) End Function
参考になるでしょうか。
もう少し詳細な条件:
とかがわかると、もっとぴったりの回答がつくかもしれません。
まさにズバリの回答,ありがとうございました。まさかこれほどすぐに頂けるとは思いもよりませんでした。本当に感謝いたします。