選択範囲に合計入力する
マクロ講座16回
記録のマクロで数式がR1C1形式になる マクロ講座16回
選択範囲に合計入力する FormulaR1C1
今日は、選択したセル範囲に合計を入力するマクロです。記録のマクロで数式がR1C1形式になる例です。
(サンプルファイルは、こちらから 2013マクロ講座16回サンプルデータ)
Rangeオブジェクトについて
セルの選択には、Rangeオブジェクトを使って
Range("A1:B4").Select のように指定してやります。
Range("A1:B4").Select のように指定してやります。
選択される範囲は、下図のようになります。
Rangeプロパティで2つの引数を指定する場合は、次のように記述します。
Range("A1","D4").Select
A1セルを左上端、D4セルを右下端とする範囲が選択されています。
Range("A1","D4").Select
A1セルを左上端、D4セルを右下端とする範囲が選択されています。
これらの例では、Rangeプロパティの前に対象オブジェクトが指定されていません。
シートなどの特定の対象オブジェクトを指定しないで、いきなりRangeから始めた場合は、通常アクティブシートのセル範囲を指定したことになります。
シートなどの特定の対象オブジェクトを指定しないで、いきなりRangeから始めた場合は、通常アクティブシートのセル範囲を指定したことになります。
なお、VBAでセル範囲を記述する場合、[]を使ってショートカットが利用できます。
Sub sample03()
[A5].Select
End Sub
Sub sample03()
[A5].Select
End Sub
Sub sample04()
[A3:C4].Select
End Sub
””は、必要ありません。
[A3:C4].Select
End Sub
””は、必要ありません。
FormulaR1C1とは、なぜR1C1になるのか。
さて、選択したセル範囲に合計を入力するマクロをマクロの記録で作成しましょう。
マクロの記録で、セルE2:E4を選択して、 =SUM(B2:D2)と入力し、 CTRLキーを押しながらEnterキーを押します。
出来上がったコードをみてみましょう。
ですが、次はちょっと見慣れない形式で書かれています。
Selection.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
は、セルの内容でSUM関数で合計を出していますが1行にまとめられて、
SUM(B2:D2)と入力したにもかかわらず、R1C1形式に変わっているのです。
フォーミュラーは型や形式のことですね。
R1C1の、RはRowのRで行を表しています。
R1C1の、CはColumnのCで列を表しています。
A1形式ではなく、行と列で表す形式だと理解してください。
ワークシート上では、通常のA1形式で表示されています。
マクロの記録で、セルE2:E4を選択して、 =SUM(B2:D2)と入力し、 CTRLキーを押しながらEnterキーを押します。
出来上がったコードをみてみましょう。
Sub 選択範囲に合計入力する() Range("E2:E4").Select Selection.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" End SubRange("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 は、省略できますから、
コードは、以下のようにスッキリします。
列を3つ前から、1つ前の合計ってかけば、3箇所とも同じ式ですんでいまいますよね!
また、Select
Selection は、省略できますから、
コードは、以下のようにスッキリします。
Sub 選択範囲に合計入力する2() Range("E2:E4").FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" End Sub