【VBAリファレンス|実務向け】【Excel VBA】セルに数式を入力/取得する(Formula/FormulaR1C1/Formula2プロパティ)

スポンサーリンク

1. 導入:なぜVBAで数式を入力するのか

Excel業務において、計算結果をセルに反映させる際、手動で数式を入力したり、オートフィルでコピーしたりしていませんか?データ量が多い場合、その作業自体がミスを誘発する要因になります。VBAで数式を直接入力できれば、データ量に関わらず一瞬で正確な計算処理を実行できます。本記事では、実務で必須となる3つの数式プロパティを使いこなす方法を解説します。

2. 基礎知識:プロパティの使い分け

VBAでセルに数式を入れるには、主に以下の3つのプロパティを使用します。

・Formulaプロパティ: A1形式(例:=SUM(A1:B1))で数式を入力します。最も直感的で、普段Excelで使っている数式をそのまま文字列として渡せます。
・FormulaR1C1プロパティ: R1C1形式(行や列を数値で指定)で数式を入力します。相対的な位置関係(「左の列の合計」など)を扱う際に非常に強力です。
・Formula2プロパティ: Excel 365や2021以降の「スピル(動的配列)」に対応したプロパティです。これまでのFormulaプロパティではエラーになりがちな新しい関数(UNIQUEやSORTなど)を使用する際に必須となります。

3. 実装/解決策:目的に応じた選択

実務では「固定の範囲」ならFormula、「可変の範囲や相対位置」ならFormulaR1C1という使い分けが定石です。

4. サンプルプログラム

以下のコードを標準モジュールに貼り付けて、動作を確認してみてください。

Sub FormulaExample()
‘ 1. Formulaプロパティ(固定範囲)
‘ D2セルにB2:B5の合計を代入
Range(“D2”).Formula = “=SUM(B2:B5)”

‘ 2. FormulaR1C1プロパティ(相対参照)
‘ アクティブセルの左隣のセルから3つ左までの平均を計算
‘ RCは同じ行、C[-n]は左にn列という意味
ActiveCell.FormulaR1C1 = “=AVERAGE(RC[-3]:RC[-1])”

‘ 3. Formula2プロパティ(スピル対応)
‘ A2からA10のデータを一括でユニーク抽出して表示(スピル機能)
Range(“F2”).Formula2 = “=UNIQUE(A2:A10)”
End Sub

5. 応用・注意点:現場で陥りやすい罠

・ダブルクォーテーションの扱い:
数式内に「”」を含めたい場合は、VBA上では「””」と二重にする必要があります。
(例:IF関数で空白を表示するなら “=IF(A1=””””,””未入力””,A1)” と記述します)

・「マクロの記録」の落とし穴:
「マクロの記録」を使うと、単純な値の入力でも「ActiveCell.FormulaR1C1 = “値”」と記録されることがあります。これでも動作しますが、単なる値の代入であれば「.Value = “値”」とした方がコードの可読性が高まり、意図が明確になります。

・Formula2の互換性:
Formula2は比較的新しい機能です。古いバージョンのExcel(2019以前)で共有するファイルの場合、動作しない可能性があるため、チームの環境を確認してから導入するようにしてください。

これらのプロパティを使いこなせば、帳票作成やデータ集計の自動化が劇的に加速します。ぜひ実務に取り入れてみてください。

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