アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAで配列同士の計算をすることはできますか?
たとえば、配列A,B,Cがあったときに
C=A+Bみたいな記述はできるのでしょうか?

A 回答 (4件)

>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
「VBAで配列の計算」の回答画像4
    • good
    • 1

出来ません。

配列要素を1個ずつ計算する必要があります。
そういう計算をするプロシージャなら出来ます。
    • good
    • 3

あまりにも素っ気なかったので参考サイト。



Excel(エクセル) VBA入門:配列の利用
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
でお勉強を。
    • good
    • 1

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 が返ります。

というようなこと?
    • good
    • 4

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A