Excelのセルに数式を入力
<< エクセルVBAでExcelのセルのアドレスを取得する :前の記事
こちらでは、RangeオブジェクトのFormulaプロパティとFormulaR1C1プロパティを利用して、Excelのセルに数式を入力する方法について解説しています。
プロパティとはオブジェクトの属性を指します。属性とは、そのオブジェクトの情報そのものです。プロパティはその値を取得したり、設定することもできます。プロパティを利用するにはオブジェクト名とプロパティ名の間に「.(ピリオド)」で結んで記述します。
オブジェクト名.プロパティ名
また、プロパティを設定する場合は以下のように「=(イコール)」を記述し設定値を代入します。
オブジェクト名.プロパティ名 = 設定値
目次
- はじめに
- 利用するプロパティについて
- セルを参照する形式
- Formulaプロパティを利用したセルに数式を入力するサンプルコード
- FormulaR1C1プロパティを利用したセルに数式を入力するサンプルコード
- Valueプロパティを利用したセルに数式を入力するサンプルコード
- まとめ
- エクセルVBAのセル操作一覧
はじめに
こちらでは、FormulaプロパティとFormulaR1C1プロパティを利用したExcelのセルに数式を入力する方法について解説します。2つのプロパティの違いはセルを参照する形式にあります。こちらの違いについても解説していますので、しっかり理解しましょう。
利用するプロパティについて
今回利用するプロパティは以下になります。- Formulaプロパティ
- FormulaR1C1プロパティ
Formulaプロパティとは
RangeオブジェクトのFormulaプロパティはA1形式の表記形式でセルに数式を設定します。
FormulaR1C1プロパティとは
RangeオブジェクトのFormulaR1C1プロパティはR1C1形式の表記形式でセルに数式を設定します。
セルを参照する形式
セルを参照する形式は、「A1形式」と「R1C1形式」の2つがあります。更に、それぞれの形式で「相対参照」と「絶対参照」の記述方法もありますので、併せて覚えましょう。基本的にどちらで設定したとしても結果は同じですが、処理したい内容に合わせて適した形式を選択してください
参照形式 | 相対参照 | 絶対参照 |
---|---|---|
A1形式 | =A1 | =$A$1 |
R1C1形式 | =R[2]C[3] | =R2C3 |
A1形式とは
A1形式は「A1」「B2」など列のアルファベットに行の行番号を合わせた形式になります。こちらは特定のセルから指定したA1形式の値の位置を相対的に参照した「相対参照」のA1形式です。Excelのワークシートは列がA.B,C・・のアルファベットで行が1,2,3・・・の数字で表します。よって「B2」の場合は、Bは2列目に2は2行目のセルを表します。
どのセルから見ても必ず指定したA1形式の値を参照するには行・列それぞれに「$(ドルマーク)」を付けて「$A$1」「$B$2」と記述します。このような参照を「絶対参照」と言います。
「相対参照」と「絶対参照」の違いがいまいち分からないという方もいるかと思いますが、セルをコピーして他のセルへ貼り付けると違いが分かるかと思います。以下の事例ではB3セルに相対参照で「=A3」をC3セルに絶対参照で「=$A$3」を設定しています。

それぞれ同じA3セルの値を参照しています。次にB3セルをB4セルへ、C3セルをC4セルへコピーしてみます。以下はコピーした結果になりますが、B4セルの値が「2」になっています。設定を確認すると「=A4」が設定されていました。B3セルの「=A3」はA3セルを参照しているのではなく「B3セル(特定のセル)から左へ1つ移動したセルの参照」になりますので、B4セルにコピーすると「B4セルから左へ1つ移動したセル」つまりA4を参照していることになります。このように相対的に参照することを「相対参照」と言います。

次にC4セルを見てみると「=$A$3」が設定されています。C3セルはA3セルを参照しているので、C4セルも同じくA3セルを参照しています。このように絶対的に参照することを「絶対参照」と言います。

また、「=$A3」のような列だけ絶対参照や「=A$3」のような行だけ絶対参照など行・列の個別に対して設定もできますので、覚えておきましょう。
R1C1形式とは
R1C1形式は「R2C1」「R3C5]」など行のR(Row)に行番号を列のC(Column)に列番号を合わせた形式になります。こちら行の行番号と列の列番号を指定した「絶対参照」のR1C1形式です。例えば「R2C1」の場合、2行目と1列目のセルになりますのでA2セルを参照します。
R1C1形式で「相対参照」の設定をしたい場合は、行番号と列番号を「[](角かっこ)」で括ります。例えばA2セルに「=R[2]C[1]」を設定するとA2セル(特定のセル)から下へ2行目と右へ1列目のB4セルを参照します。
R1C1形式はRangeオブジェクトが示すセル範囲からの相対的な位置になります。行の場合は下方向が正の値・上方向が負の値に、列の場合は右方向が正の値・左方向が負の値になります。
Formulaプロパティを利用したセルに数式を入力するサンプルコード
今回のVBAコードはFormulaプロパティを利用したExcelのセルに数式を入力するマクロになります。
Sub sample()
For i = 2 To 6
Cells(i, "C").Formula = "=A2+B2"
Cells(i, "D").Formula = "=$A$2+$B$2"
Next i
End Sub
実行結果

解説
sampleプロシージャのSubステートメントに引数は設定されていません。For~Nextステートメントを利用してカウンタ変数iに2~6の5回ループ処理を行っています。中身に処理を見てみると、Cellsプロパティの行にカウンタ変数iを設定しているため、2~6行目のC・D列を参照しています。
そして、Formulaプロパティにそれぞれ「=A2+B2」「=$A$2+$B$2」のA1形式で設定しています。C列のセルには「相対参照」でD列のセルには「絶対参照」で設定していますが、設定値を入力するためすべてのセルの値がA2セルとB2セルの値を足した「3」になります。。最後はEndステートメントを利用してsampleプロシージャを終了させます。
FormulaR1C1プロパティを利用したセルに数式を入力するサンプルコード
今回のVBAコードはFormulaR1C1プロパティを利用したExcelのセルに数式を入力するマクロになります。
Sub sample()
For i = 2 To 6
Cells(i, "C").FormulaR1C1 = "=RC[-2]+RC[-1]"
Cells(i, "D").FormulaR1C1 = "=R2C1+R2C2"
Next i
End Sub
実行結果

解説
今回は、FormulaR1C1プロパティを利用したセルに数式を入力する事例です。FormulaR1C1プロパティの設定値には「=RC[-2]+RC[-1]」「=R2C1+R2C2」のR1C1形式で設定しています。こちらもC列のセルには「相対参照」でD列のセルには「絶対参照」で設定しています。
実行結果を見るとC列にはそれぞれ異なった数式が入力され、D列には絶対参照でD2~D6セルに「=$A$2+$B$2」の数式が入力されています。
C列のセルでは、C2セルに「=A2+B2」C3セルに「=A3+B3」と異なった数式が設定されています。これがR1C1形式で設定した特長になります。今回の事例で説明するとR1C1形式で設定した数式は、入力する特定のセルから左へ2列目の値と左へ1列の目の値の合計で、C2セルからはA2セルとB2セルの合計がC3セルからはA3セルとB3セルの合計が数式として入力されます。
ここで試しにFormulaR1C1プロパティにA1形式の値を設定したらどうなるかについてみていきます。以下はA1形式の値を設定した場合の事例です。
Sub sample()
For i = 2 To 6
Cells(i, "C").FormulaR1C1 = "=A2+B2"
Cells(i, "D").FormulaR1C1 = "=$A$2+$B$2"
Next i
End Sub
こちらを実行するとC2セルに「='A2'+'B2'」が入力され「#NAME?」が表示されます。これは計算式に間違いがあるエラーになります。理由としてはセル番地を「'(シングルクォーテーション)」で囲っており文字列扱いとなりエラーになっています。FormulaR1C1プロパティに相対参照のA1形式を設定してもプログラム上エラーは発生せず処理事態は正常に完了しますので注意してください。
次にDセルに「=$A$2+$B$2」を入力しようとすると以下の実行エラーで「実行時エラー'1004':アプリケーション定義またはオブジェクト定義のエラーです。」と表示されます。絶対参照のA1形式の場合は、実行時エラーが発生しますので、こちらもご注意ください。

Valueプロパティを利用したセルに数式を入力するサンプルコード
今回のVBAコードはValueプロパティを利用したExcelのセルに数式を入力するマクロになります。
Sub sample()
For i = 2 To 6
Cells(i, "C").Value = "=A2+B2"
Cells(i, "D").Value = "=$A$2+$B$2"
Next i
End Sub
実行結果

解説
セルに設定値を入力するのであれば、Valueプロパティでも行うことができます。こちらはA1形式の数式を入力していますが、Formulaプロパティと同じ結果になっているのが分かるかと思います。
次にR1C1形式の場合も見ていきます。以下はR1C1形式での事例になります。こちらもFormulaR1C1プロパティと同じ結果になりました。
Sub sample()
For i = 2 To 6
Cells(i, "C").Value = "=RC[-2]+RC[-1]"
Cells(i, "D").Value = "=R2C1+R2C2"
Next i
End Sub

まとめ
今回は、RangeオブジェクトのFormulaプロパティとFormulaR1C1プロパティを利用して、Excelのセルの数式を入力する方法について解説しました。しかし最後にValueプロパティを利用しても同じ結果になったため、FormulaプロパティとFormulaR1C1プロパティは必要ないのではと思われる方もいらっしゃるかと思います。この2つはセルの数式を取得する場合に本領発揮しますので、次回は、エクセルVBAでExcelの数式を取得する方法について解説します。
エクセルVBAのセル操作一覧
次の記事: エクセルVBAでExcelのセルの数式を取得する >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。