人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excel VBAで質問です。

MMULTの引数である配列の中に変数を組み込みたいのですが,それはどのようにしたら可能でしょうか。行列の指定範囲を1セルずつ広げて,何度も行列の積を求めるようなプログラムにしたいと思っています。最初に的確な回答を頂いた方に100ポイントを差し上げます。

●質問者: etedu
●カテゴリ:コンピュータ
✍キーワード:Excel VBA セル プログラム ポイント
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● y3kz
●100ポイント

条件が具体的にわからないのですが、以下のように仮定します。



この前提で書いてみたのが以下の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

参考になるでしょうか。


もう少し詳細な条件:

とかがわかると、もっとぴったりの回答がつくかもしれません。

◎質問者からの返答

まさにズバリの回答,ありがとうございました。まさかこれほどすぐに頂けるとは思いもよりませんでした。本当に感謝いたします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ