毎月の売上データを集計する場合、月ごとにシートが分かれているときは一手間かかります。
Excelマクロで、シートを1つのシートにする方法を解説しました。
※スクリーンショットをKeynoteで加工
複数のシートをピボットテーブルで集計?
売上データをExcelで集計するなら、ピボットテーブルが便利です。
【関連記事】売上を細かく分析するならExcelのピボットテーブル、データバー、グラフがおすすめ
リンク
売上データは、月ごとにシートに分かれている場合もあります。
1月のデータ
2月のデータ
その場合も、ピボットテーブルが使えるのでしょうか。
複数のシートからピボットテーブルを作れないこともありませんが、おすすめしません。
日付と金額という単純なデータならなんとかなりますが、今回の事例のように、日付、商品、金額とあると、うまくいかないからです。
また、複数のシートにデータが分散することは本来好ましいことではありません。
Excelでピボットテーブルを使って集計するなら、1つのシートにデータを集めることを考えましょう。
そのクセをつけておくと、Excelが上達します。
複数のシートにあるデータを1つにするにはマクロを使わざるを得ません。
(逆にいえば、1つのシートにデータがあればマクロを使わなくてすむのです。)
シートごとの売上を1つにするExcelマクロ
複数シートにあるデータ、シートごとの売上を集計するには次のようなマクロを使います。
Sub sheetmerge() 'シート[merge]を削除 On Error Resume Next Application.DisplayAlerts = False Worksheets("merge").Delete Application.DisplayAlerts = True 'シート[merge]を一番右に追加 Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "merge" 'すべてのシートで実行 Dim w As Worksheet For Each w In Worksheets 'シート「merge」以外 If w.Name <> "merge" Then '各シートのデータをカウント Dim From_Max_Row From_Max_Row = w.Range("a" & Rows.Count).End(xlUp).Row 'シート[merge]の貼り付け位置をカウント Dim To_Max_Row To_Max_Row = Worksheets("merge").Range("a" & Rows.Count).End(xlUp).Row '各シートからシート[merge]へコピーして貼り付け w.Rows("1:" & From_Max_Row).Copy Worksheets("merge").Range("a" & To_Max_Row + 1) End If Next End Sub
マクロの使い方はこちらの記事を参考にしてください。
【関連記事】ネット上のマクロを自分のファイルに流用する方法
リンク
このマクロは、汎用性があるように作っています。
どんな種類のファイルでも、[merge]というシートを作り、そこにすべてのシートのデータを集めてくれるものです。
①シートを追加し、名前を[merge]に変更
すでにシート[merge]があると、シートを追加して名前を[merge]にするときにエラーがでます。
そこで、「すでにシート[merge]があれば、削除する」という処理を冒頭に入れています。
'シート[merge]を削除 On Error Resume Next Application.DisplayAlerts = False Worksheets("merge").Delete Application.DisplayAlerts = True 'シート[merge]を一番右に追加 Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "merge"
②各シートでデータをカウント
シート[merge]以外の各シートでデータを選択します。
「シート[merge]以外」という処理をやっているのはIFの部分です。
If w.Name <> "merge" Then ○○○ End If
その場合、データがある行だけ選択するようにしています。
各シートのデータ数が違っていてもこれで自動的に対応できるのです。
'各シートのデータをカウント Dim From_Max_Row From_Max_Row = w.Range("a" & Rows.Count).End(xlUp).Row
③シート[merge]へ貼付
1月のデータをコピーして貼り付け、2月のデータをコピーして貼り付けるとき、すでに貼り付けた1月のデータに上に貼り付けては意味がありません。
すでに貼り付けたデータの1つ下に貼り付けます。
「各シートのデータをすべてコピーし、シート[merge]の一番下+1の場所に貼り付ける」という処理です。
'各シートからシート[merge]へコピーして貼り付け w.Rows("1:" & From_Max_Row).Copy Worksheets("merge").Range("a" & To_Max_Row + 1)
以上の汎用性があるマクロだと、見出し部分(日付、商品、金額)も貼り付けられてしまいますが、このままピボットテーブルで集計することもできますし、フィルターをかけて削除することもできます。
今回の事例でアレンジするなら、次のようにやってみましょう。
Sub sheetmerge2() 'シート[merge]を削除 On Error Resume Next Application.DisplayAlerts = False Worksheets("merge").Delete Application.DisplayAlerts = True 'シート[merge]を一番右に追加 Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "merge" '◇追加 シート[merge]に見出しをつける Worksheets("merge").Range("a1").Value = "日付" Worksheets("merge").Range("b1").Value = "商品" Worksheets("merge").Range("c1").Value = "金額" 'すべてのシートで実行 Dim w As Worksheet For Each w In Worksheets 'シート「merge」以外 If w.Name <> "merge" Then '各シートのデータをカウント Dim From_Max_Row From_Max_Row = w.Range("a" & Rows.Count).End(xlUp).Row 'シート[merge]の貼り付け位置をカウント Dim To_Max_Row To_Max_Row = Worksheets("merge").Range("a" & Rows.Count).End(xlUp).Row '各シートからシート[merge]へコピーして貼り付け '◇変更 各シートの2行目からコピー w.Rows("2:" & From_Max_Row).Copy Worksheets("merge").Range("a" & To_Max_Row + 1) End If Next End Sub
こういったデータができあがります。
1枚のシート→ピボットテーブル
1枚のシートになればこっちのものです。
(「+」は同時、「→」は1つずつ押します)
①データのいずれかにカーソルを置き、Ctrl+T→Enterでテーブル作成
②Alt→N→V→Enterでピボットテーブル作成
③ピボットテーブルフィールド(右)で、商品、金額にチェック
という流れで、こういった集計ができます。
商品別集計です。
月別の表にしたり、
商品・月別の表にしたり、
[条件付き書式]→[データバー]で見やすくしたり、
[金額]と[個数]を表示したり、自由自在です。
マクロで集計までやることもできますが、ピボットテーブルのほうがかんたんで応用がききます。
データを集計するにはピボットテーブルを使う
↓
データは1つのシートに入力する、まとめる
↓
複数のシートの場合はマクロで1つにする
という流れで考えておきましょう。
■サンプル
EX-ITサンプル 月別シート集計マクロ.xlsm
※マクロはショートカットキーCtrl+Shift+mで実行できます。
または、Alt+F8で、[sheetmerge2]を実行してください。
【関連記事】データ→ピボットテーブルの活用。Excel表計算ソフトだけど、表を作ってはいけない。
リンク
【関連記事】かっこいいSUMIF・SUMIFS・COUNTIF・COUNTIFSよりも、かんたんなピボットテーブル
リンク
執筆環境を変えてみようかと、新しいソフトを導入してみました。
ソフトのせいにしてはいけないのですが・・・。
遅れている書籍原稿、なんとか取り戻します。
【昨日の1日1新】
※詳細は→「1日1新」
Scrivener製品版
Parallels Desktop12
■著書
『税理士のためのプログラミング -ChatGPTで知識ゼロから始める本-』
『すべてをがんばりすぎなくてもいい!顧問先の満足度を高める税理士業務の見極め方』
ひとり税理士のギモンに答える128問128答
【インボイス対応版】ひとり社長の経理の基本
「繁忙期」でもやりたいことを諦めない! 税理士のための業務効率化マニュアル
ひとり税理士の自宅仕事術
リモート経理完全マニュアル――小さな会社にお金を残す87のノウハウ
ひとり税理士のセーフティネットとリスクマネジメント
税理士のためのRPA入門~一歩踏み出せば変えられる!業務効率化の方法~
やってはいけないExcel――「やってはいけない」がわかると「Excelの正解」がわかる
AI時代のひとり税理士
新版 そのまま使える 経理&会計のためのExcel入門
フリーランスとひとり社長のための 経理をエクセルでトコトン楽にする本
新版 ひとり社長の経理の基本
『ひとり税理士の仕事術』
『フリーランスのための一生仕事に困らない本』
【監修】十人十色の「ひとり税理士」という生き方