Excelのセルの数式を取得
<< エクセルVBAでExcelのセルに数式を入力する :前の記事
こちらでは、RangeオブジェクトのFormulaプロパティとFormulaR1C1プロパティを利用して、Excelのセルの数式を取得する方法について解説しています。
プロパティとはオブジェクトの属性を指します。属性とは、そのオブジェクトの情報そのものです。プロパティはその値を取得したり、設定することもできます。プロパティを利用するにはオブジェクト名とプロパティ名の間に「.(ピリオド)」で結んで記述します。
オブジェクト名.プロパティ名
また、プロパティを設定する場合は以下のように「=(イコール)」を記述し設定値を代入します。
オブジェクト名.プロパティ名 = 設定値
目次
- はじめに
- 利用するプロパティについて
- セルを参照する形式
- Valueプロパティを利用したセルの数式を取得するサンプルコード
- Formulaプロパティを利用したセルの数式を取得するサンプルコード
- FormulaR1C1プロパティを利用したセルの数式を取得するサンプルコード
- まとめ
- エクセル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オブジェクトが示すセル範囲からの相対的な位置になります。行の場合は下方向が正の値・上方向が負の値に、列の場合は右方向が正の値・左方向が負の値になります。
Valueプロパティを利用したセルの数式を取得するサンプルコード
今回のVBAコードはValueプロパティを利用したExcelのセルの数式を取得するマクロになります。
Sub sample()
MsgBox "C2セルの値: " & range("C2").Value & vbCrLf & vbCrLf & _
"D2セルの値: " & range("D2").Value
End Sub
まず、セルには以下のように「相対参照」と「絶対参照」の計算式を入力してから実行します。

実行結果

解説
sampleプロシージャのSubステートメントに引数は設定されていません。MsgBox関数の引数にはC2セルとD2セルのValueプロパティの値を設定しています。実行結果を確認するとValueプロパティはセルの値そのものを取得しているのが分かります。最後はEndステートメントを利用してsampleプロシージャを終了させます。
Formulaプロパティを利用したセルの数式を取得するサンプルコード
今回のVBAコードはFormulaプロパティを利用したExcelのセルの数式を取得するマクロになります。
Sub sample()
MsgBox "C2セルの数式: " & range("C2").Formula & vbCrLf & vbCrLf & _
"D2セルの数式: " & range("D2").Formula
End Sub
実行結果

解説
こちらでは、C2セルとD2セルのFormulaプロパティの値を取得しています。実行結果を確認するとFormulaプロパティはセルの数式をA1形式で取得しています。「相対参照」と「絶対参照」も認識して取得していることを覚えましょう。
FormulaR1C1プロパティを利用したセルの数式を取得するサンプルコード
今回のVBAコードはFormulaR1C1プロパティを利用したExcelのセルの数式を取得するマクロになります。
Sub sample()
MsgBox "C2セルの数式: " & range("C2").FormulaR1C1 & vbCrLf & vbCrLf & _
"D2セルの数式: " & range("D2").FormulaR1C1
End Sub
実行結果

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