Excelのセルの数式を取得

<< エクセルVBAでExcelのセルに数式を入力する :前の記事

こちらでは、RangeオブジェクトFormulaプロパティFormulaR1C1プロパティを利用して、Excelのセルの数式を取得する方法について解説しています。

プロパティとはオブジェクトの属性を指します。属性とは、そのオブジェクトの情報そのものです。プロパティはその値を取得したり、設定することもできます。プロパティを利用するにはオブジェクト名とプロパティ名の間に「.(ピリオド)」で結んで記述します。

オブジェクト名.プロパティ名

また、プロパティを設定する場合は以下のように「=(イコール)」を記述し設定値を代入します。

オブジェクト名.プロパティ名 = 設定値

目次

はじめに

こちらでは、FormulaプロパティFormulaR1C1プロパティを利用したExcelのセルの数式を取得する方法について解説します。2つのプロパティの違いはセルを参照する形式にあります。こちらの違いについても解説していますので、しっかり理解しましょう。

利用するプロパティについて

今回利用するプロパティは以下になります。

  • Formulaプロパティ
  • FormulaR1C1プロパティ

Formulaプロパティとは

RangeオブジェクトのFormulaプロパティA1形式の表記形式でセルに数式を設定します。

Range("セル範囲").Formula = A1形式の数式

FormulaR1C1プロパティとは

RangeオブジェクトのFormulaR1C1プロパティR1C1形式の表記形式でセルに数式を設定します。

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を参照していることになります。このように相対的に参照することを「相対参照」と言います。

セルの相対参照2

次に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

まず、セルには以下のように「相対参照」と「絶対参照」の計算式を入力してから実行します。

エクセルVBAでセルの数式を取得

実行結果

エクセルVBAのValueプロパティでセルの値を取得

解説

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

実行結果

エクセルVBAのFormulaプロパティでセルの数式を取得

解説

こちらでは、C2セルとD2セルのFormulaプロパティの値を取得しています。実行結果を確認するとFormulaプロパティセルの数式をA1形式で取得しています。「相対参照」と「絶対参照」も認識して取得していることを覚えましょう。

FormulaR1C1プロパティを利用したセルの数式を取得するサンプルコード

今回のVBAコードはFormulaR1C1プロパティを利用したExcelのセルの数式を取得するマクロになります。


Sub sample()

    MsgBox "C2セルの数式: " & range("C2").FormulaR1C1 & vbCrLf & vbCrLf & _
           "D2セルの数式: " & range("D2").FormulaR1C1

End Sub

実行結果

エクセルVBAのFormulaR1C1プロパティでセルの数式を取得

解説

こちらでは、C2セルとD2セルのFormulaR1C1プロパティの値を取得しています。実行結果を確認するとFormulaR1C1プロパティセルの数式をR1C1形式で取得しています。

まとめ

今回は、RangeオブジェクトのFormulaプロパティFormulaR1C1プロパティを利用して、Excelのセルの数式を取得する方法について解説しました。次回は、エクセルVBAでExcelのセルを検索する方法について解説します。

エクセルVBAのセル操作一覧

次の記事: エクセルVBAでExcelのセルを検索する >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

  • このエントリーをはてなブックマークに追加
ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください^^

VBAのInternetExplorer操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE(InternetExplorer)操作にも挑戦してみてください^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

エクセルVBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。