◆ Range.Formula
プロパティの概要
Formula
プロパティは、指定されたセルまたはセル範囲に対して数式(formula)を設定・取得するためのプロパティです。Excelで直接セルに入力するような文字列形式の数式を、VBAから操作できるという特徴があります。
◆ 基本的な使い方
● 数式の設定(代入)
Range("A1").Formula = "=SUM(B1:B10)"
このコードは、セルA1に =SUM(B1:B10)
という数式を挿入します。
● 数式の取得(読み取り)
Dim f As String
f = Range("A1").Formula
MsgBox "A1の数式は " & f
このコードで、A1に設定されている数式の内容を取得し、メッセージボックスで表示します。
◆ Formula
と FormulaR1C1
の違い
プロパティ | 説明 |
---|---|
Formula | 通常の「A1形式」の参照で数式を扱う |
FormulaR1C1 | 「R1C1形式」で数式を扱う |
● 例:
Range("A2").Formula = "=B2+C2" ' A1形式
Range("A2").FormulaR1C1 = "=RC[1]+RC[2]" ' R1C1形式(同じ意味)
R1C1形式
は相対参照や動的な式の組み立てに便利です。
◆ 数式の一括設定
複数のセルに同じ数式を一括設定することも可能です。
Range("C2:C10").Formula = "=A2+B2"
ただしこの方法では、先頭セルにだけ正しく設定され、他のセルには同じ文字列が入ってしまう可能性があります。自動的な行番号の調整をしたい場合は、R1C1形式
を使うと確実です。
Range("C2:C10").FormulaR1C1 = "=RC[-2]+RC[-1]"
◆ 数式を動的に構築する
数式の内容を変数で組み立てることで、より柔軟な数式挿入が可能になります。
● 例:動的な合計対象範囲の作成
Dim lastRow As Long
lastRow = Cells(Rows.Count, 2).End(xlUp).Row
Range("C1").Formula = "=SUM(B1:B" & lastRow & ")"
このようにすれば、データの最終行までを対象とする数式が生成できます。
◆ 数式を含むセルの確認・取得
ある範囲内で、数式が含まれているセルだけを抽出するには、以下のようなコードを使います。
Dim cell As Range
For Each cell In Range("A1:A10")
If cell.HasFormula Then
Debug.Print cell.Address & ": " & cell.Formula
End If
Next cell
◆ FormulaLocal
プロパティとの違い
Formula
は英語式(例:=SUM(A1:A10)
)FormulaLocal
は日本語式(例:=合計(A1:A10)
)
● 日本語版Excelでローカル関数を使いたい場合
Range("A1").FormulaLocal = "=合計(B1:B10)"
ただし、FormulaLocal
は多言語対応が難しいため、基本的には Formula
を使うのが推奨です。
◆ 応用テクニック
1. 式の変更検出
ワークシート関数で使っていた式をVBAから動的に変更可能です。
If Range("A1").Formula = "=SUM(B1:B10)" Then
Range("A1").Formula = "=AVERAGE(B1:B10)"
End If
2. 入力規則やチェックとの併用
数式を自動挿入してから、入力チェックや検証を行うことも可能です。
If Range("A1").HasFormula Then
If InStr(1, Range("A1").Formula, "SUM") > 0 Then
MsgBox "A1にはSUM関数が使われています。"
End If
End If
3. 数式付きテンプレートの複製
数式のあるテンプレート行をコピーし、別の行へ数式付きで複製することもできます。
Rows(2).Copy
Rows(3).PasteSpecial xlPasteFormulas
◆ よくあるエラーと対処法
エラー内容 | 原因と対処法 |
---|---|
アプリケーション定義またはオブジェクト定義のエラー | 数式文字列が不正、またはセルが不適切 |
数式が入らず文字列になる | 先頭に「' (アポストロフィ)が入っている |
数式が一部のセルでずれる | R1C1形式を使わないと相対参照が壊れる |
◆ まとめ
Formula
プロパティは、VBAからセルに数式を設定・取得するための非常に重要な手段です。基本的な用途から応用的なテクニックまで、以下のような形で活用できます。
活用場面 | 方法例 |
---|---|
単一セルへの数式挿入 | Range("A1").Formula = "=A2+B2" |
複数セルへの応用 | Range("C2:C10").FormulaR1C1 = "=RC[-2]+RC[-1]" |
数式の取得 | f = Range("A1").Formula |
条件分岐 | If cell.HasFormula Then ... |
多言語対応 | 英語版:Formula 、日本語版:FormulaLocal |