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 のような式そのもの |
数式かどうか確認 | .HasFormula | True(数式あり)/ False(なし) |
セルに入力された式を扱う場面は、帳票の構造分析や数式の置き換え、チェック機能の実装など多岐にわたります。
正しく .Value
と .Formula
を使い分けられるようにしておくことが、実務VBAの第一歩です!
コメント