こんにちは、わたあめです。VBAって同じ処理をするにしても、複数の方法がありますよね。今回の記事では、Excelの関数式をVBAでセルに記入する場合、FormulaとValueどちらを使えば良いか?を考えてみた記事となります。
それでは、いってみましょう!
FormulaとValueの違いとは
記入の場合
VBAマクロでセルに関数式を入れる場合、FormulaまたはValueを使います。
「=A1+A2」という計算式をC1にマクロで入れるという例で、2つのプロパティを比較します。Formulaプロパティを利用する場合は以下の書き方です。
Valueプロパティを利用する場合は、以下の書き方です。
どちらの書き方もC1に計算式「=A1+A2」と入れて、C1にこの計算式が問題なく入ります。セルに式を記入するという使い方の場合、基本的にはどちらのプロパティを使っても問題ない(変わりない)のではないかと思います。
取得の場合
式を記入(設定する場合)どちらのプロパティを使っても変らないことが確認できました。では、セルから値を取得する場合はどうかみていきましょう。
セルA1に1、セルA2に2、セルC1に「=A1+A2」と入力されているとします。この状態で値を取得してメッセージボックスに値を表示させてみます。
MsgBox(Worksheets("Sheet1").Range("C1").Formula)
この結果、表示されるのは「=A1+A2」となります。
MsgBox(Worksheets("Sheet1").Range("C1").Value)
この結果、表示されるのは「3」となります。
値を取得する場合は、式そのものを取得するか・式の計算結果を取得するかの違いが出てきます。どちらの値を利用したいかによって、プロパティを使い分ければOKです。
注意点:長すぎる式の場合の対処
FormulaやValueプロパティを使って、VBAで式を記入する際、一行に長すぎる式は入らなかったので注意が必要でした。わたあめの環境だと1024文字(※半角は1文字、全角は2文字としてカウント)を超えると入力が出来ないので複数行に分ける必要がありました。
式の改行の仕方にはちょっとした注意が必要でした。具体例でみていきましょう。
Worksheets("Sheet1").Range("C1").Value = "SUM(A1:A3) _
+ SUM(A4:A6)"
この書き方だとVisual Basicのエディタで赤文字となってしまいます。
Worksheets("Sheet1").Range("C1").Value = "SUM(A1:A3)" &_
"+ SUM(A4:A6)"
という数式同士を「&_」でつなぐことでエラーないコードとなりました。
"数式" &_
"数式のつづき" という書き方にしましょう!(自戒)
さいごに
いかがだったでしょうか!VBAについての素朴な疑問を調べたという記事でした。VBA作りのお役に立てれば幸いです。それでは、また!