Excel VBA | 超初心者(Excel操作+マクロ体験):Excelオブジェクト基礎 - Formula

Excel VBA VBA
スポンサーリンク

Formula は「セルに入っている“数式そのもの”を読み書きするプロパティ」

まずイメージから。
Value が「セルの中身(結果の値)」だとしたら、
Formula は「セルに入っている数式そのもの(= から始まる式)」 を扱うプロパティです。

セルに =SUM(A1:A10) と入っているなら、
Formula は "=SUM(A1:A10)" という文字列を返します。
逆に、Formula に "=SUM(A1:A10)" を代入すると、その数式がセルに入ります。

「数式バーに見えているもの」= Formula
「セルに表示されている結果」= Value
と覚えるとスッと入ります。


基本中の基本:Formula で数式を“書く”・“読む”

数式をセルにセットする(書き込む)

Sub SampleFormulaWrite()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Range("A1").Formula = "=SUM(B1:B10)"
    ws.Range("A2").Formula = "=B2*C2"

End Sub
VB

ポイントは次の通りです。

数式は必ず = から始める
VBA では文字列なので、 "=SUM(B1:B10)" のようにダブルクォーテーションで囲む
Value に文字列 "=SUM(B1:B10)" を入れても動くが、「数式を扱う」という意味では Formula を使う方が意図が明確

「手でセルに数式を打つ」のを、そのままコードで書いているイメージです。

セルに入っている数式を取得する(読み取る)

Sub SampleFormulaRead()

    Dim ws As Worksheet
    Dim f As String

    Set ws = ThisWorkbook.Worksheets("入力")

    f = ws.Range("A1").Formula

    MsgBox "A1 の数式は " & f & " です。"

End Sub
VB

A1 に =SUM(B1:B10) が入っていれば、
メッセージボックスには =SUM(B1:B10) と表示されます。

ここで大事なのは、

「結果(合計値)が欲しいなら Value」
「式そのものが欲しいなら Formula」

と、目的によって使い分けることです。


Formula と Value の違いを、具体例でハッキリさせる

同じセルでも、見ているものが違う

例えば、A1 に =1+2 と入っているとします。

Dim v, f As String

v = Range("A1").Value      ' v = 3
f = Range("A1").Formula    ' f = "=1+2"
VB

Value は「計算結果の 3」
Formula は「=1+2 という式そのもの」

この違いを、感覚としてしっかり持っておいてください。

数式がないセルの場合

A1 にただの数値 100 が入っている場合:

Range("A1").Value   ' 100
Range("A1").Formula ' 100(定数として返る)
VB

Formula は「数式がなければ、そのセルの定数を返す」仕様です。
超初心者のうちは、「数式が入っていれば式、そうでなければ値が返る」くらいの理解でOKです。


複数セルに一気に数式を入れる

同じ数式をまとめて入れる

Sub SampleFormulaMulti()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Range("C2:C10").Formula = "=A2+B2"

End Sub
VB

この書き方は、「C2 には =A2+B2 が入り、C3 には =A3+B3 …」というふうに、
行番号が自動的に調整されます(通常のオートフィルと同じ感覚)。

「1セルに入れた数式を下にコピーする」のを、1行でやっているイメージです。

行番号を自分で組み立てたいとき(少し先の話)

行番号や列を変数で組み立てたいときは、文字列連結で式を作ります。

Sub SampleFormulaDynamic()

    Dim ws As Worksheet
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("入力")

    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    ws.Range("C2").Formula = "=SUM(A2:A" & lastRow & ")"

End Sub
VB

ここでは、
"=SUM(A2:A" & lastRow & ")" という文字列を作ってから Formula に入れています。

「数式もただの文字列」として扱える、という感覚が持てると、
かなり自由度が上がります。


Formula と FormulaR1C1 の違いをざっくり知っておく

A1 形式と R1C1 形式

Formula は、普段の Excel と同じ「A1 形式」で書きます。

Range("A2").Formula = "=B2+C2"
VB

一方、FormulaR1C1 は「R1C1 形式」で書きます。

Range("A2").FormulaR1C1 = "=RC[1]+RC[2]"
VB

ここでの意味は、

RC[1] → 「今のセルと同じ行の、1 列右」
RC[2] → 「今のセルと同じ行の、2 列右」

つまり、どちらも「A2 = B2 + C2」と同じ意味です。

超初心者の段階では、
「まずは Formula(A1 形式)だけで十分」
「R1C1 は“相対参照の式を組み立てたいときに便利”くらいの理解で OK」
と割り切ってしまって大丈夫です。


Formula を使うときに意識してほしい重要ポイント

「数式バーに見えているものを、そのまま文字列で書く」

Formula に代入するときは、
「自分が手でセルに打つ数式」を、そのまま "..." で囲んで書きます。

=SUM(B1:B10) と打つなら、
"=SUM(B1:B10)" を Formula に渡す、というだけです。

難しく考えず、

セルに手で打つ式

それをダブルクォーテーションで囲んで Formula に代入

という流れをイメージしてください。

「結果が欲しいのか」「式そのものが欲しいのか」を毎回意識する

セルから何かを取り出すとき、
無意識に Value を使いがちですが、
「式そのものを見たいのか」「計算結果を見たいのか」で使い分けます。

結果が欲しい → .Value
式そのものが欲しい → .Formula

ここを意識して書けるようになると、
「なんで 3 じゃなくて =1+2 が入ってるんだ?」みたいな混乱が減ります。


まとめ:Formula は「セルの数式をコードから操るための窓」

Formula の本質は、

「セルに入っている数式そのもの(= から始まる式)を、文字列として読み書きするプロパティ」

です。

押さえておきたいポイントをコンパクトにまとめると、

Formula は「数式バーに見えているもの」、Value は「計算結果」
Range("A1").Formula = "=SUM(B1:B10)" のように、手で打つ式をそのまま文字列で渡す
複数セルに一気に数式を入れることもでき、行番号は自動調整される
結果が欲しいときは Value、式そのものが欲しいときは Formula を使い分ける

タイトルとURLをコピーしました