マクロの記録で行列操作

次に行や列を自動的に増やす処理をマクロで組まなくてはいけなくなった時に、マクロの記録を使って書き方を調べて、VBAを作成する例を考えてみたいと思います。ある陶器販売店で売上明細表を作成しました。日付を指定して、その日付のみのデータを取り出して日報を作成してみましょう。

図10:売上一覧表

例として8月1日、日報を作成しました。

図11:8月1日の日報

日付により、表示行の数が変わります。行の挿入で対応したいのですが、VBAでどう書くのかわからない時、操作の手順をVBAにするには、マクロの記録が役に立ちます。行の挿入をマクロの記録で書いてみましょう。[開発]-[マクロの記録」-「マクロの記録」ダイアログで、[OK]ボタンを押して記録を開始します。行を指定して、右クリックでメニューを出し、挿入をクリックします。

図12:行の挿入を記録

[記録終了]アイコンをクリックして、マクロの記録を終了させます。VBAを見てみましょう。

[リスト4]行の挿入、マクロ記録

Sub Macro1()
'
' Macro1 Macro
'
    Rows("22:22").Select    '(1)
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove '(2)
End Sub

(1)で行を指定しています。(2)が行挿入メソッドです。 同じように、列の挿入をVBAにしてみましょう。

[リスト5]列の挿入、マクロの記録

Sub Macro2()
'
' Macro2 Macro
'
    Columns("I:I").Select   '(1)
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove '(2)
End Sub

(1)で列を指定しています。(2)が列の挿入メソッドです。[リスト4]と[リスト5]をみてもらうと、挿入メソッドは同じ「Selection.Insert」ということがわかります。「どの範囲を指定しているのか」と、「引数の書き方」でどのような挿入をするのかを指定しています。次にVBAのヘルプを使って「Selection.Insertメソッド」を調べてみましょう。

「Selection.Insert」について少し説明を行います。

[構文]Selection.Insertメソッド

Selection.Insert (Shift,CopyOrigin)

以下、引数の説明です。

Selection.Insertの引数の説明

引数 概要
Shift xlShiftDown (元セルを下に持っていく)または xlShiftToRight(元セルを右に持っていく)が指定できます。省略すると、セルの範囲指定により、自動的に判断されます。
CopyOrigin xlFormatFromLeftOrAbove(上および左のセルから形式をコピー)、xlFormatFromRightOrBelow(下および右のセルから形式をコピー)

ヘルプでは、Shiftの説明でxlShiftDown、xlShiftToRightと書かれていますが、実際にマクロの記録を行うと、xlDown、xlToRightと書かれます。同じ意味のようです。行と列の挿入ができるようになりました。マクロを実行させるための表をつくりましょう。データを書くところは、行の挿入でまかなうので、表題や合計の部分のみでよいはずです。下図のように考えました。

図13:集計結果をセットする表と実行用ボタン