VBAマクロを、簡単に作成してみませんか?
例として、アプリで「列数が変わるデータの最終列に、合計を表示」するVBAマクロを作成します。
処理のイメージ
事例
合計欄を作成する定型作業です。
データは、日が経つにつれ、列方向に増加します。
マクロで入力するエクセル関数
数式があるセルの、左隣を取得する関数は、
=INDIRECT(ADDRESS(ROW(),COLUMN()-1))
です。
よって、合計を取得する関数は、
=SUM($D3:INDIRECT(ADDRESS(ROW(),COLUMN()-1)))
となります。
※ 合計する左端セルは$を忘れず、$D3とします。
※ なお、行が増減する表の合計の関数は、
=SUM(D$3:INDIRECT(ADDRESS(ROW()-1,COLUMN())))
になります。
アプリの設定
アプリの設定です。
※ 処理する範囲は、データの1列目のセルアドレスを入れます。
※ 範囲オプション欄は、選択肢の「最終行の一つ下」を選び、最終行を最終列に読み替えて処理に☑を入れます。
※ 処理する範囲の左上セルに対応する関数を、入力する数式欄に入れます。
その際、=を含め数式を””で囲むことを忘れないでください。
また、エクセルからアプリに数式を貼り付けるとき、エクセル上でEscキーを押し、コピーを解除することを忘れないでください。
表示されるVBAコード
アプリで作成されたコードを、VBE画面に貼り付ければ、マクロの完成です。
Sub デモ_45() '数式入力
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False ' 警告表示を停止
Dim セル範囲 As String, セル As Range, 右下セル As String
Dim 右上セル As String
Sheets("sheet1").Select
Range("d3:d8").CurrentRegion.Select
右上セル = Cells(Range("d3").Row, Selection.Column+ Selection.Columns.Count).Address(False,False)
右下セル = Cells(Range("d8").Row, Selection.Column+ Selection.Columns.Count).Address(False,False)
セル範囲 = 右上セル & ":" & 右下セルRange(セル範囲).Select
Call デモ_45_メイン処理 (セル範囲,セル)
Application.DisplayAlerts = true ' 警告表示を再開
Application.ScreenUpdating = True ' 画面描画を再開
End Sub
Sub デモ_45_メイン処理 (セル範囲 As String, セル As Range)
Selection.Offset(0, 0).Formula = "=SUM($D3:INDIRECT(ADDRESS(ROW(),COLUMN()-1)))"
End sub
※上のSubで、表全体(CurrentRegion)から、最終列の一つ右列の範囲を選択します。
※下のSubで、その範囲に関数を入力します。
マクロを使うメリット
手作業で数分かかる作業が、1秒で終わります。