選択範囲に合計入力するマクロ エクセルマクロ講座14回

選択範囲に合計入力するマクロ

合計入力するマクロ
選択範囲に合計入力するマクロ

マクロ 14回

 選択範囲に合計入力するマクロ

今回は、選択範囲に合計入力するマクロをマクロの記録から作成してみましょう。
(サンプルファイルは、こちらから マクロ講座14回サンプルデータ

選択範囲に合計入力するマクロ 

マクロの記録開始します。
マクロの名前をつけます。OKをクリック。
セルE2:E4を選択して、
=SUM(B2:D2)と入力し、
CTRLキーを押しながらEnterキーを押します。
マク□の記録を終了してBVEを起動します。

できましたか? それでは、マクロの中身を見てみましょう。
【コードの解説】
Range("E2:E4").Select
  E2:E4の範囲を選択します。
Selection.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
  選択範囲に =SUM(RC[-3]:RC[-1]
             という数式を代入します。
ポイント
ワークシートでは入力確定時に、Ctrlキーを押しながらEnterキーを押すことにより、 選択範囲のすべてのセルに値や数式を入力することができます。

VBAで同じことをする場合、セル範囲を表すRangeオブジェクトに対して、 そのFormulaR1C1プロパティに値や数式を代入することで一括で処理できます。
数式の場合、コードでは、セル番地がR1C1形式で相対的に表されますので、 「おや?」と思ったかもしれません。
でも、ワークシート上では本来の設定通り(通常はA1形式)で表示されます。

VBAで数式を入力したり数式を取得するのには、Formulaプロパティ、FormulaR1C1プロパティを使います。
Formulaプロパティは「A1形式」でセル番地を指定するのに対して、 FormulaR1C1プロパティは行(ROW)と列(Column) を数値で指定します。

マクロは「ステートメント」と呼ばれる命令文の集まりです。
ステートメントとは、1つの完結した命令文のことです。
突然そんなこと言われても、
「いったい何のこっちゃ?」って思いますよね。

マクロの中身を見てもらいながら、説明しましょう。


Sub 計算SUM()
    Range("E2:E4").Select
    Selection.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
End Sub    
改行コードで区切られた1行1行が、ステートメントなんです。

マクロは、
ステートメントの集まりで、

まず1行目は、Subステートメント、
2行目と3行目は、Excelの機能を実行するためのステートメント
4行目は、End Sub ステートメント

の範囲までです。

  そして、この範囲のことを「Subプロシージャ」ともいいます。

 マクロ=Sub プロシージャ
 
 と考えておきましょう。
 Sub ステートメント
        ・・・マクロの開始位置  
 ステートメント
        ・・・1行1行が、VBAの命令文 
 End Sub ステートメント
        ・・・マクロの終了位置


 ここで注意しなければならないことは、
 命令文=ステートメントは1行で書くということです。
 
 ステートメントは1行に記録しなければならないのですね。

 もし、長い命令文の時は、どうするのかって?
 そのときは、行末に行継続を現すために、
 
 半角スペースとアンダースコア (_) →『 _』

 がついているので、次の行に継続していると判断されます。

記録で作成したコードの簡素化

また、記録で作成したコードを簡略化するために、
Select Selectionコードを省略します。
○○.Select 
Selection.×× 
出来上がったコードです。すっきりしてますね。
Sub 計算SUM()
    Range("E2:E4").FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
End Sub    

Formula A1形式に書き換える

FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"のコードを理解しやすいFormula A1形式に書き換えることができます。
Sub 計算SUM2()
    Range("E2:E4").Formula = "=SUM(B2:D2)"
End Sub
また隣の列に平均を出す数式に置き換えることもできます。 式は以下のようになります。
Sub 平均()
    Range("F2:F4").Formula = "=AVERAGE(B2:D2)"
End Sub

今日の講義は以上です。お疲れ様でした。