選択範囲に合計入力する

マクロ講座16回 
FormulaR1C1を使い選択範囲に合計入力

記録のマクロで数式がR1C1形式になる マクロ講座16回

選択範囲に合計入力する FormulaR1C1

今日は、選択したセル範囲に合計を入力するマクロです。記録のマクロで数式がR1C1形式になる例です。

(サンプルファイルは、こちらから 2013マクロ講座16回サンプルデータ

Rangeオブジェクトについて

セルの選択には、Rangeオブジェクトを使って
Range("A1:B4").Select のように指定してやります。Rangeオブジェクト
選択される範囲は、下図のようになります。

Rangeプロパティで2つの引数を指定する場合は、次のように記述します。
Range("A1","D4").Select

A1セルを左上端、D4セルを右下端とする範囲が選択されています。
これらの例では、Rangeプロパティの前に対象オブジェクトが指定されていません。
シートなどの特定の対象オブジェクトを指定しないで、いきなりRangeから始めた場合は、通常アクティブシートのセル範囲を指定したことになります。
なお、VBAでセル範囲を記述する場合、[]を使ってショートカットが利用できます。

Sub sample03()
[A5].Select
End Sub


Sub sample04()
[A3:C4].Select
End Sub
””は、必要ありません。


FormulaR1C1とは、なぜR1C1になるのか。

さて、選択したセル範囲に合計を入力するマクロをマクロの記録で作成しましょう。
マクロの記録で、セルE2:E4を選択して、 =SUM(B2:D2)と入力し、 CTRLキーを押しながらEnterキーを押します。

出来上がったコードをみてみましょう。

Sub 選択範囲に合計入力する()
    Range("E2:E4").Select
    Selection.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
End Sub    
    
Range("E2:E4").Select は、合計欄E2:E4を選択するコード
ですが、次はちょっと見慣れない形式で書かれています。

Selection.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
は、セルの内容でSUM関数で合計を出していますが1行にまとめられて、
SUM(B2:D2)と入力したにもかかわらず、R1C1形式に変わっているのです。

フォーミュラーは型や形式のことですね。
R1C1の、RはRowのRで行を表しています。
R1C1の、CはColumnのCで列を表しています。
A1形式ではなく、行と列で表す形式だと理解してください。

ワークシート上では、通常のA1形式で表示されています。

なぜマクロの記録では、FormulaR1C1になるかといえば、行と列で表すことで、式が1つで済んでしまうからなのです。
列を3つ前から、1つ前の合計ってかけば、3箇所とも同じ式ですんでいまいますよね!

また、Select
Selection は、省略できますから、
コードは、以下のようにスッキリします。

Sub 選択範囲に合計入力する2()
    Range("E2:E4").FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
End Sub