カテゴリ: Excel VBA 更新日: 2026/04/11

Excel VBAでセルに数式を入力!FormulaとFormulaR1C1の違いを徹底解説

セルに数式を設定する方法!Formula/FormulaR1C1の違いを解説
セルに数式を設定する方法!Formula/FormulaR1C1の違いを解説

先生と生徒の会話形式で理解しよう

生徒

「エクセルの計算式をVBAで自動的に入力したいのですが、どうすればいいですか?SUM関数とかをプログラムで入れたいんです。」

先生

「それなら Formula プロパティを使うのが基本ですよ。実はVBAには、私たちが普段使う形式のほかに FormulaR1C1 という特殊な書き方もあるんです。」

生徒

「二つもあるんですか?何が違うのか、初心者にもわかりやすく教えてほしいです!」

先生

「使い分けると自動化がもっと楽になりますよ。それぞれの特徴を順番に見ていきましょう!」

1. VBAでセルに数式を設定する基本

1. VBAでセルに数式を設定する基本
1. VBAでセルに数式を設定する基本

Excel VBA(エクセル・ブイビーエー)を使って自動化を行う際、ただセルに数字や文字を入れるだけでなく、エクセルの便利な「計算式(関数)」をプログラムから入力したい場面がよくあります。例えば、売上の合計を出す SUM 関数や、条件で結果を変える IF 関数などです。

プログラミング未経験の方にとって、「数式をコードで書く」と聞くと難しく感じるかもしれませんが、基本は「セルに対して、この数式を入れてね」と指示を出すだけです。これには Formula(フォーミュラ) という言葉を使います。英語で「数式」という意味です。これを使うことで、人間が手で入力するのと同じように、セルに計算式をセットすることができます。

2. Formulaプロパティの使い方とA1形式

2. Formulaプロパティの使い方とA1形式
2. Formulaプロパティの使い方とA1形式

最も一般的で分かりやすいのが Formula プロパティです。これは、私たちが普段エクセルの画面で見ている「A1」や「B2」といった列(アルファベット)と行(数字)の組み合わせで数式を書く方法です。これを A1形式 と呼びます。

例えば、C1セルに「A1とB1を足す」という数式を入れたい場合は、Range("C1").Formula = "=A1+B1" と書きます。注意点は、数式全体を " "(ダブルクォーテーション) で囲むことと、先頭に =(イコール) を忘れないことです。パソコンに「これはただの文字じゃなくて計算式だよ」と教えてあげるための大事なルールです。


Sub SimpleFormula()
    ' B3セルに、B1とB2を合計するSUM関数を入力します
    ' 普段エクセルに入力する形式そのままでOKです
    Range("B3").Formula = "=SUM(B1:B2)"
End Sub

3. FormulaR1C1プロパティとは?R1C1形式の基本

3. FormulaR1C1プロパティとは?R1C1形式の基本
3. FormulaR1C1プロパティとは?R1C1形式の基本

もう一つの書き方が FormulaR1C1(フォーミュラ・アールワンシーワン) です。これはプログラミング特有の考え方で、場所を「行(Row)」と「列(Column)」の番号で指定する方法です。R は行、C は列を指します。

この形式の最大の特徴は、特定の場所を指すのではなく「自分から見てどこのセルか」という 相対的な位置 で指定できる点です。例えば、R[-1]C と書けば「自分の1行上のセル」という意味になります。アルファベットを使わないので、プログラムで大量のセルに同じルールで計算式を入れたいときに、非常に強力な威力を発揮します。パソコンに慣れていない方には少し奇妙に見えますが、実はとても合理的な仕組みなのです。

4. FormulaとFormulaR1C1の決定的な違い

4. FormulaとFormulaR1C1の決定的な違い
4. FormulaとFormulaR1C1の決定的な違い

この二つの大きな違いは、「固定の場所」 を指すか 「関係性」 を指すかです。Formula(A1形式)は、常に「あの場所」を指します。一方、FormulaR1C1 は「ここから見て隣のセル」といった書き方が得意です。

例えば、100行あるデータの隣の列にすべて「左のセルを2倍にする」という数式を入れたいとします。A1形式だと「A1を2倍」「A2を2倍」…と一行ずつ違う数式を用意しなければなりませんが、R1C1形式なら「左のセルを2倍」という 一つの数式 をすべてのセルにコピーするだけで済みます。この「一つのルールを使い回せる」という点が、複雑な自動化を行う上で非常に重要になってきます。


Sub R1C1Sample()
    ' C1セルに「同じ行の1列左(B1)と2列左(A1)を足す」数式を入れます
    ' Rは行(Row)、Cは列(Column)です。[]の中は現在のセルからの距離です
    Range("C1").FormulaR1C1 = "=RC[-1]+RC[-2]"
End Sub

5. 相対参照と絶対参照の書き分け

5. 相対参照と絶対参照の書き分け
5. 相対参照と絶対参照の書き分け

エクセルには、数式をコピーしても場所がずれないようにする「$(ドル記号)」を使った 絶対参照 という仕組みがあります。VBAのR1C1形式でもこれを表現できます。[] を使わない数字がそれにあたります。

例えば、R1C1 と書けば、どこのセルから見ても「1行目の1列目(A1)」を指します。これに対して、先ほどの R[-1]C のように [] を使うと「今の場所から相対的に見てどこか」という 相対参照 になります。この二つを組み合わせることで、「常に消費税率が書いてあるセル(絶対参照)を参照しつつ、隣の商品の金額(相対参照)を計算する」といった、実務でよくある複雑な数式も自動で作れるようになります。

6. 大量コピーに強い!数式の一括設定

6. 大量コピーに強い!数式の一括設定
6. 大量コピーに強い!数式の一括設定

VBAで数式を設定する際に知っておくと便利なのが、一つのセルだけでなく 範囲全体 に一気に数式を流し込めるという点です。これは手作業で「オートフィル(数式のコピー)」をするのと同じ効果を、たった一行のコードで実現します。

範囲を指定して Formula または FormulaR1C1 に数式を代入すると、エクセルが賢く判断して、各セルの場所に合わせて数式を調整してくれます。これにより、何千行というデータに対して計算式を設定する処理が、目にも止まらぬ速さで完了します。事務効率化において、この一括設定は欠かせないテクニックです。


Sub AutoFillFormula()
    ' B2からB10までの範囲に、一気に「A列の値を1.1倍にする」数式を入れます
    ' A1形式でも、エクセルが自動で行番号を調整してくれます
    Range("B2:B10").Formula = "=A2*1.1"
End Sub

7. 文字列の中に「"(ダブルクォーテーション)」を入れるコツ

7. 文字列の中に「
7. 文字列の中に「"(ダブルクォーテーション)」を入れるコツ

初心者の方が最も苦労するのが、IF 関数などのように 数式の中に文字が含まれる場合 です。VBAでは数式全体を " " で囲みますが、その中にある文字も " " で囲む必要があるため、パソコンが混乱してしまいます。

ルールは簡単です。数式の中のダブルクォーテーションを2個連続で書く("" "") ことです。例えば、=IF(A1="","空","有") という数式をVBAで書きたいときは、""" " のように重ねて記述します。これは「エスケープ」と呼ばれる技術で、パソコンに「これは囲みの終わりじゃなくて、数式の中の記号だよ」と教えるためのものです。慣れるまでは少しややこしいですが、エラーが出たときはここを真っ先に疑ってみましょう。


Sub IfFormulaSample()
    ' A1が空なら「空」、そうでなければ「有」と表示するIF関数を入力
    ' 数式内のダブルクォーテーションを2つ重ねるのがポイントです
    Range("B1").Formula = "=IF(A1="""",""空"",""有"")"
End Sub

8. Valueプロパティとの違い:値だけか式ごとか

8. Valueプロパティとの違い:値だけか式ごとか
8. Valueプロパティとの違い:値だけか式ごとか

最後に、よく似ている Value(バリュー) プロパティとの違いを確認しましょう。Value は「セルの値そのもの」を扱います。もし Range("A1").Value = "=1+1" と書いたとしても、多くの場合エクセルが気を利かせて数式として扱ってくれますが、本来は「値」を入れるための場所です。

一方、Formula は「数式として扱うこと」を前提にしています。計算結果だけが欲しいなら Value で計算結果を書き込み、エクセルのシート上に計算の履歴(数式)を残して、後からユーザーが数字を変えたときに再計算されるようにしたいなら Formula を使います。この使い分けができるようになると、ユーザーにとって使いやすい「親切な自動化ツール」が作れるようになりますよ。

9. 実務での使い分け:結局どっちがいいの?

9. 実務での使い分け:結局どっちがいいの?
9. 実務での使い分け:結局どっちがいいの?

結論として、初心者のうちは Formula(A1形式)から始めるのがおすすめです。自分が普段使っている数式をそのままコピーして " " で囲めば動くので、ハードルが低いです。マクロの記録機能を使って出てきたコードも、まずはこの形式で読み解いてみましょう。

一方で、プログラミングに慣れてきて「もっとスマートに、どんな表でも使い回せるコードを書きたい」と思うようになったら、ぜひ FormulaR1C1 に挑戦してみてください。行列の番号を計算で動かせるようになると、VBAの可能性が無限に広がります。どちらを使っても、エクセルが自動で計算してくれる素晴らしさに変わりはありません。自分のペースで、少しずつ道具を増やしていってくださいね!

カテゴリの一覧へ
新着記事
New1
Excel VBA
Excel VBAでセルに数式を入力!FormulaとFormulaR1C1の違いを徹底解説
New2
Excel VBA
Excel VBAで業務自動化!初心者でもわかる定型作業の自動化例
New3
Excel VBA
VBAの基本構造を理解しよう!モジュール・プロシージャ・関数の役割まとめ
New4
Office Scripts
Office Scriptsで大量シートを効率管理!Excelワークブック最適構造と自動化テクニック
人気記事
No.1
Java&Spring記事人気No1
Office Scripts
Office Scriptsで別ブックを開いてデータ取得する方法|OneDrive・SharePoint連携でExcel自動化
No.2
Java&Spring記事人気No2
Excel VBA
Excel VBA参照設定エラー「参照が見つかりません」を完全解説!初心者でも原因と対処法がわかる
No.3
Java&Spring記事人気No3
Excel VBA
個人用マクロブック(PERSONAL.XLSB)で作る最強の共通ライブラリ化ガイド
No.4
Java&Spring記事人気No4
Excel VBA
Excel VBAで列の追加・行の削除を自動化!InsertとDeleteの使い方を初心者向けに徹底解説
No.5
Java&Spring記事人気No5
Excel VBA
Excel VBAモジュール共有術!複数のブックでマクロを使い回す最適構成
No.6
Java&Spring記事人気No6
Excel VBA
Excel VBAは今後なくなる?将来性と企業での活用状況を詳しく解説
No.7
Java&Spring記事人気No7
Excel VBA
Excel VBAの開発環境を最速で整える!VBEの開き方から基本操作まで完全ガイド
No.8
Java&Spring記事人気No8
Excel VBA
VBAのコメントの書き方を完全ガイド!初心者でもわかる説明文の付け方