数式が入力されているセルの「値」と「式」の取得の違い

Excelのセルには、直接入力された値だけでなく、数式(=A1+B1など)が入力されていることもあります。VBAでは、セルの「表示されている値」と「実際に入力された数式(文字列)」を別々に取得することができます。

この記事では、その違いと取得方法、用途別の使い分けについてわかりやすく解説します。


1. 値と数式、それぞれの取得方法

VBAでは、セルから以下のように2種類の情報を取得できます。

取得内容プロパティ説明
計算後の値.Valueセルに表示されている値
入力された式.Formulaセルに入力されている数式

2. 例:実際に見てみよう

A1セルに次のような数式が入力されているとします。

=A2 + B2

A2=5、B2=3 の場合、A1セルに表示される値は 8 です。

このとき、次のVBAコードを実行すると:

Sub ShowFormulaAndValue()
MsgBox "値: " & Range("A1").Value
MsgBox "式: " & Range("A1").Formula
End Sub

表示されるメッセージは次の通りです:

  • 値: 8
  • 式: =A2+B2

つまり、

  • .Value は「結果(8)」
  • .Formula は「入力式(=A2+B2)」
    を表します。

3. ワークシート関数との違いにも注意

Excel上で、セルに数式を入力すると =SUM(A1:A5) のような形式になりますが、VBAで Formula を使ってセルに式を設定する場合も、この形式を使います。

Range("C1").Formula = "=SUM(A1:A5)"

これで、C1セルには =SUM(A1:A5) が入力され、計算結果が表示されます。


4. 数式がないセルに .Formula を使うと?

数式が入力されていないセルに .Formula を使っても、セルの中身(値)をそのまま文字列として取得します。

例:

Range("A1").Value = "りんご"
MsgBox Range("A1").Formula

→ 結果:りんご が表示されます。
つまり、.Formula だからといって、必ずしも「=」で始まるとは限りません。


5. 数式かどうかを判定する方法

セルが数式かどうかを判定するには、以下のように .HasFormula プロパティを使います。

If Range("A1").HasFormula Then
MsgBox "A1には数式が入力されています"
Else
MsgBox "A1には数式はありません"
End If

6. 応用:値と数式を一覧で取得する例

A列に数式があるかを調べ、B列に「値」、C列に「式」を出力する例です。

Sub ShowFormulas()
Dim i As Long
For i = 1 To 10
With Range("A" & i)
Range("B" & i).Value = .Value
If .HasFormula Then
Range("C" & i).Value = .Formula
Else
Range("C" & i).Value = "(数式なし)"
End If
End With
Next i
End Sub

7. まとめ

目的プロパティ内容
計算後の表示値.Valueセルに表示されている数値や文字列
入力された数式.Formula=A1+B1 のような式そのもの
数式かどうか確認.HasFormulaTrue(数式あり)/ False(なし)

セルに入力された式を扱う場面は、帳票の構造分析や数式の置き換え、チェック機能の実装など多岐にわたります。
正しく .Value と .Formula を使い分けられるようにしておくことが、実務VBAの第一歩です!

コメント

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