| 
    
     |  | 皆さん、おはようございます。 
 
 >    A    B    C
 >1つ目の行列
 >2    1    1    1
 >3    2    2    2
 >4    3    3    3
 >
 >
 >1つ目の行列
 >12    1    1    1
 >13    2    2    2
 >14    3    3    3
 >15
 という入力データとしてのセル範囲に対して
 
 結果として
 
 
 >
 >行列積を A22 から貼り付け
 
 >22     6   6    6
 >23    12   12   12
 >24    18   18   18
 
 という出力をしたい。
 >
 ちかさんへ
 上記のような具体例を提示して
 やりたいことと
 入力データと出力データを明確にした記述をすることを
 心がけてください。
 
 文章だけでは判りづらいと思いませんか?
 具体例が一つで足りなければ二つでも三つでも提示します。
 
 自分が知りたいことを見ている方に理解してもらう
 努力をしましょう!!
 
 >Sub 行列積()
 >Dim n1 As Long, n2 As Long
 >Dim m1 As Long, m2 As Long
 >Dim addrss1 As String, addrss2 As String
 >  '
 >  '1つ目の行列の範囲 (m1,n1)行列
 >  m1 = 3: n1 = 3
 >  addrss1 = Range("A2").Resize(m1, n1).Address(0, 0)
 >  '2つ目の行列の範囲 (m2,n2)行列
 >  m2 = 3: n2 = 3
 >  addrss2 = Range("A12").Resize(m2, n2).Address(0, 0)
 >  '
 >  '行列積の貼り付け
 >  Sheets("sheet1").Range("A22").Resize(m1, n2).FormulaArray = _
 >     "=MMult(Sheet1!" & addrss1 & "," & "Sheet1!" & addrss2 & ")"
 >End Sub
 
 で、 kobasanさんの提示された例のデータを基にして・・・。
 
 MMULT関数って私は、使ったことがありませんが
 本来は、 kobasanさんのコードのように配列数式として使用することで
 その機能を発揮するものだと思います(特例は除いて)。
 
 
 配列を使用せずに行と列の掛け算の和を少しでも簡単にするために使用する
 というのなら、上記のデータ例を引用すると
 
 '================================================================
 Sub 行列積2()
 dim rrng as range
 dim crng as range
 dim rw as long,col as long
 Set rrng = Range("A2").Resize(, 3)
 Set crng = Range("A12").Resize(3)
 With Range("a22")
 For rw = 1 To 3
 For col = 1 To 3
 .Cells(rw, col).Formula = "=mmult(" & rrng.Offset(rw - 1, 0).Address & "," & _
 crng.Offset(0, col - 1).Address & ")"
 Next
 Next
 End With
 End Sub
 
 で試してみて下さい
 
 |  |