日々の 売上データを毎日月次表に追加する
マクロ 58回
日々の 売上データを毎日月次表に追加する
毎日売り上げを集計して報告しなければならない表があってそのデータ数は日ごとに変わります。
その表を月次集計の表に 移したいというケースです。 日計の集計用のデータを月次集計に移動するということになります。
データが毎日どんどん追加されていく場合に、日計表の方では 可変の表のデータ範囲を 取得してそれをコピーするという操作があり、 月次集計の表の方では新規入力行を 見つけてそこに貼りつけるという操作をしてやるわけです。
(サンプルファイルは、こちらから
マクロ19回サンプルデータ)
日計表からデータの範囲を特定する
日計表からデータの範囲を特定するには、 どのようにすればよいでしょう。サンプルでは 範囲は A 2から G 27となっています。 A 2は固定で G 列の行数部分だけが変化します。
そこで表の最終行を求めるには 特定のセル 例えば表の最下段のセル A1048576?などから Endプロパティ使ってデータのある場所へジャンプしてやればいいわけです。
この場合、Rows.Countを使うこともできます。目的は表の最終行の取得です。
最終行を取得し選択する
最終行に移動するには、Selectしてやります。ジャンプする元となるセルは何もシートの最下端セルである必要は特になくて、例えば毎日のデータが100件に満たない ことが確実であればその3倍ぐらいの A 300セルからアップしてもいいわけです。
Sub 最終行() Range("A300").End(xlUp).Select MsgBox "行番号は" & Selection.Row & "です。" End Sub
サンプルではMsgBoxを使って移動した行番号を表示しています。
月次集計表では、最終行の次の行を取得し選択する
一方、月次集計表では、最終行の次の行を取得し選択する必要があります。 その場合取得した最終行から1行だけ 下に ずれるということでOffset を使うことができます。
日計表のデータをコピーして続きに貼り付ける
最終行を変数として宣言します。
その方がコードが見やすくなるという利点もあります。
日計表のLastRow1と貼り付け先のLastRow2を定義してやります。
Dim LastRow1 As Long Dim LastRow2 As Long LastRow1 = Sheets("日計表").Range("A" & Rows.Count).End(xlUp).Row LastRow2 = Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row
コピーして貼り付けるコードは1行で書けます。
Sheets("日計表").Range("A2:G" & LastRow1).Copy Sheets("Sheet2").Cells(LastRow2 + 1, 1)
売上データを月次表に追加するマクロ
では 完成したマクロを実行してみましょう。月次表の A333 が選択されて、 コピーしたデータが貼り付けられています。
売上データを月次表に追加するマクロのコードは次にようになります。
Sub 続きに貼り付ける() Dim LastRow1 As Long Dim LastRow2 As Long LastRow1 = Sheets("日計表").Range("A" & Rows.Count).End(xlUp).Row LastRow2 = Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row Sheets("日計表").Range("A2:G" & LastRow1).Copy Sheets("Sheet2").Cells(LastRow2 + 1, 1) End Sub
詳しく解説した動画もありますのでそちらも参考になさってください。