プチIT化 PR

【VBA】関数式の記入、FormulaとValueどちらを使えばいいのか

記事内に商品プロモーションを含む場合があります。
当サイトは、アフィリエイト広告を利用しています。

こんにちは、わたあめです。VBAって同じ処理をするにしても、複数の方法がありますよね。今回の記事では、Excelの関数式をVBAでセルに記入する場合、FormulaとValueどちらを使えば良いか?を考えてみた記事となります。

それでは、いってみましょう!

FormulaとValueの違いとは

記入の場合

VBAマクロでセルに関数式を入れる場合、FormulaまたはValueを使います。

「=A1+A2」という計算式をC1にマクロで入れるという例で、2つのプロパティを比較します。Formulaプロパティを利用する場合は以下の書き方です。

Range("C1").Formula = "=A1+A2"

Valueプロパティを利用する場合は、以下の書き方です。

Range("C1").Value = "=A1+A2"

どちらの書き方も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作りのお役に立てれば幸いです。それでは、また!