表示の日付を指定して集計表を作成するマクロを考えていきましょう。マクロは「売上日をマクロ作成シートのセルE2に書き込んでボタン[日報]を押す」ことで実行できます。データを確認しながら、日報の項目の必要行数の挿入とデータ設定を行います。最後に合計を計算して終了です。以下はリストです。

[リスト6]nippou(挿入マクロ.xlsm)

'*******************
'集計
'*******************
Sub nippou()
    hiduke = Cells(2, 5)        '(1)

    Sheets("マクロ作成シート").Select   '(2)
    y = 5
    m = 5  'マクロ作成シートの挿入行
    Do While Sheets("売上表").Cells(y, 3) <> ""      '明細を一行ずつ確認(3)
       If Sheets("売上表").Cells(y, 3) = hiduke Then '指定データ

            If Cells(m, 2) <> "" Then     '最初の行でない
                    Rows(m + 1).Select
                    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
                    m = m + 1
                    Cells(m, 2) = Cells(m - 1, 2) + 1
            Else
                    Cells(m, 2) = 1     '最初の行  No
            End If

            Cells(m, 3) = Sheets("売上表").Cells(y, 4)   '商品名
            Cells(m, 4) = Sheets("売上表").Cells(y, 5)   '数量
            Cells(m, 5) = Sheets("売上表").Cells(y, 6)   '単価
            Cells(m, 6) = Sheets("売上表").Cells(y, 7)   '金額
        End If
        y = y + 1
    Loop
'合計計算 データは5行からm行まで("マクロ作成シート")(5)
    Cells(m + 1, 6) = 0 '合計エリア
    For i = 5 To m
        Cells(m + 1, 6) = Cells(m + 1, 6) + Cells(i, 6)
    Next

End Sub

(1)で変数hidukeに指定日付をセットしています。作業は「マクロ作成シート」で行います。変数yは「売上表」側、変数mは「マクロ作成シート」側の現在行番号を入れています。(3)のDo While文で売上表をチェックしながら、指定日付の時は初めはNoを1にセットし、2回目からは、行を挿入してNoをセットしています。すべての明細行の確認が終わったら合計値の計算です(5)。5行目からデータのあるところ、m行まで合計セルに足し込んでいきます。実行してみましょう。

図14:実行結果

新しくExcel表を開いて実行することを考えていましたが、一回実行した後、また別の日付を見たいこともあると思います。処理開始時はデータが無い表から始めると考えていたので、今のままでは二回目はできません。もし、「データがあったら削除する」という処理を追加すると二回目以降も大丈夫になります。追加してみましょう。今度は行を指定して削除する処理が必要になりました。マクロの記録で調べてみましょう。

[リスト7]行削除、マクロの記録

Sub Macro3()
'
' Macro3 Macro
'
    Rows("11:13").Select
    Selection.Delete Shift:=xlUp  '(1)
End Sub

(1)のSelection.Deleteを使います。リスト6の(2)の後に以下のリストを追加します。

[リスト8]nippouの(2)の後に追加

If Cells(5, 2) <> "" Then   'データがあったら
    Do While Cells(6, 2) <> "合計"
        Rows("6:6").Select
        Selection.Delete Shift:=xlUp
    Loop
    Cells(5, 2) = ""
    Cells(5, 3) = ""
    Cells(5, 4) = ""
    Cells(5, 5) = ""
    Cells(5, 6) = ""
    Cells(6, 6) = ""
End If

データがあった時は、6行目B列に「合計」の文字がくるまで1行ずつ削除します。最後に5行目のデータを削除します。リスト8を追加すると、続けて何回でも日報を作成することができるようになります。

今回は行の挿入を使ってVBAを作成してみました。行や列の挿入を使わなくて、罫線もマクロで書けばいいじゃないか、という意見もあると思います。提出のために、表の外の表示形式がしっかり決まっていたり、罫線をVBAで引くのが面倒に感じたりした時には挿入を使った方法も悪くないと思います。処理手順はひとつではありません。人の数だけあります。別の方法を考えてみるのも面白いかもしれません。

まとめ

マクロの記録を使っての例題はいかがでしたでしょうか。操作手順のわかっているものであれば、VBAで作成することができます。動かしてみて調べるという方法は手軽でとても便利だと思います。次回からは数回に分けてVBAが持っている関数について説明したいと思います。

WINGSプロジェクト 横塚利津子著/山田祥寛監修
<WINGSプロジェクトについて>テクニカル執筆プロジェクト(代表山田祥寛)。海外記事の翻訳から、主にWeb開発分野の書籍・雑誌/Web記事の執筆、講演等を幅広く手がける。2009年4月時点での登録メンバは30 名で、現在も一緒に執筆をできる有志を募集中。