- 締切済み
VBAで配列の計算
VBAで配列同士の計算をすることはできますか? たとえば、配列A,B,Cがあったときに C=A+Bみたいな記述はできるのでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- nishi6
- ベストアンサー率67% (869/1280)
>C=A+Bみたいな記述はできるのでしょうか? 実際、どのような計算がなさりたいかわかりませんが、配列=Rangeオブジェクト と考えれば、「C=A+B」のような記述ができます。 「C=A+B」が成立するためには基本的な演算では各要素数が一致する必要があります。そうすると、行列機能が利用できます。 添付図では、 B2:C3 に範囲名「matA」を E2:F3 に範囲名「matB」を付けています。 (質問のように「A」とか「B」でもいいですが、短い名前は怖いのでこんな名前にしました) 添付図の一番下はシート上で配列数式を使い「3×3」のセル範囲の加算をしています。Sumproduct関数も同じような性質の関数になります。配列数式はシート上では結構使いにくいんですが、VBAでは配列という感覚で逆に使いやすくなります。(私見です) ワークシート関数にMMult、Transpose、MDeterm、MInverse関数などがあるのでこれをVBA側で使えます。また、「FormulaArrayプロパティ」も使えます。 シートのコードウィンドウで実行しました。出力範囲を選択して実行します。 「Range("matA")」などを変数に代入すればそれらしく(質問のC=A+B)見えますが、そのままにしています。 ご参考に。当方Excel2010です。 '和 Sub matPlus() Selection.FormulaArray = "=matA+matB" End Sub '積 Sub matMult() Selection = Application.MMult(Range("matA"), Range("matB")) End Sub '転置行列 Sub Trns() Selection = Application.Transpose(Range("matA")) End Sub '行列式 Sub matVal() Selection = Application.MDeterm(Range("matA")) End Sub '逆行列 Sub matInv() Selection = Application.MInverse(Range("matA")) End Sub
- over_the_galaxy
- ベストアンサー率25% (104/408)
出来ません。配列要素を1個ずつ計算する必要があります。 そういう計算をするプロシージャなら出来ます。
- NotFound404
- ベストアンサー率70% (288/408)
あまりにも素っ気なかったので参考サイト。 Excel(エクセル) VBA入門:配列の利用 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_array.html でお勉強を。
- NotFound404
- ベストアンサー率70% (288/408)
a = array(1,2,3) b = array(10,20,30) c = a(0) + b(0) debug.print c で 10 が返り c= c * b(2) debug.Print c で 300 が返ります。 というようなこと?