担当者ごと、店舗ごとにシートを分けて入力してもらっている。
そして月末や週末に、それを1つの表にコピーして集計している。
そんな作業をしていませんか?
・シートを1つずつ開いて、範囲を選んでコピーして、まとめ用の表に貼る
・貼る場所を1行まちがえて、数字がずれる
・担当者が増えるたびに、手順が1つ増える
この記事では、複数のシートを1つにまとめる方法を、手軽なものから順に3つご紹介します。
関数だけで足りるケースも多いので、まずはそこからお読みください。
方法1:同じファイルの中のシートなら「VSTACK」
「田中」「高橋」「伊藤」のように、1つのファイルの中にシートが分かれている場合は、まとめ用のシートを1枚作り、1行目に見出しを書いて、A2 のセルに次の数式を1つ入れるだけで、複数シートが縦につながります。
=VSTACK('田中'!A2:D, '高橋'!A2:D, '伊藤'!A2:D)
(シート名を「'」で囲んでおくと、名前に空白が入っていてもエラーになりません)
ただ、このままだと、各シートの空いている行もいっしょに並んでしまいます。
空の行を除くには、FILTER を組み合わせます。
=FILTER(VSTACK('田中'!A2:D, '高橋'!A2:D, '伊藤'!A2:D), VSTACK('田中'!A2:A, '高橋'!A2:A, '伊藤'!A2:A)<>"")
これは「A列(ここでは日付)が空でない行だけを残す」という意味です。A列を書き忘れた行は、ほかの列に入力があっても除かれるので、どの行にも入力がある列を条件にしてください。
なお、3枚とも空のときは「#N/A」と表示されますが、データを入れれば消えます。
また、数式の下と右が空いていないと、エラー(#REF!)になります。まとめ用のシートには、ほかのものを書かないでおくと安心です。
どちらも、元のシートを書き換えると、まとめ側も自動で変わります。
方法2:別のファイルに分かれているなら「IMPORTRANGE」
店舗ごとに別のファイルになっている場合は、IMPORTRANGE で別ファイルの範囲を読み込めます。
=IMPORTRANGE("読み込みたいファイルのURL", "売上!A2:D")
初めて使うときは、セルに「#REF!」と出て、その上に「アクセスを許可」が表示されるので、押して許可します。
読み込めるのは、自分のGoogleアカウントで開けるファイルだけです。また、一度許可すると、まとめ側のファイルを編集できる人は、元のファイルの内容も読めるようになります。まとめ側を誰と共有しているかは、確かめておきましょう。
IMPORTRANGE で複数のファイルをまとめるなら、先にファイルごとに上の数式を1回ずつ入れて許可を済ませてから、QUERY と VSTACK を組み合わせます。
=QUERY(VSTACK(IMPORTRANGE("1つ目のファイルのURL", "売上!A2:D"), IMPORTRANGE("2つ目のファイルのURL", "売上!A2:D")), "select * where Col1 is not null order by Col1", 0)
「Col1 is not null」は「1列目が空の行を除く」、「order by Col1」は「1列目(日付)の順に並べる」という意味です。VSTACK でつないだ表では、列を A・B ではなく Col1・Col2 と書くのがポイントです。1列目が日付ではなく文字(担当者名など)の場合は、「Col1 is not null」の代わりに「Col1 <> ''」と書きます。
なお、QUERY は1つの列に数字と文字が混ざっていると、少ないほうの値が空になることがあります。金額の列に「未定」などの文字を入れないようにすると安心です。
関数でまとめるときの注意
関数だけで済むなら、それが一番手軽です。
ただ、次のような場合は、関数だと手間が増えたり、うまくいかなかったりします。
・担当者やファイルが増えるたびに、数式を書き足す必要がある
・シートごとに列の並びが少しずつ違う(「日付」と「金額」の順番が逆など)
・どのシートから来た行なのか、区別できるようにしたい
・「毎朝8時の時点の内容」のように、決まった時刻の状態を残したい(関数は、元が変わるとすぐに変わります)
・読み込むファイルや行が多くて、表示が重くなってきた
方法3:GASで「毎朝、自動でまとめる」
こうした場合は、GAS(Google Apps Script)という、Googleのサービスに付いている自動化のしくみを使う方法があります。
見本として、「1つのファイルの中にある担当者別の3枚のシートを、まとめ用のシートに集める」ものを作りました。
・シートが増えても、まとめの対象に自動で入る(まとめたくないシートは、設定で除外する)
・先頭の列に「どのシートから来たか」を入れる
・メニューから「今すぐまとめる」で実行できる。毎朝の自動実行も、メニューから1回設定すれば、毎朝8時台に動く
関数と違って、実行した時点の内容を書き出すので、表示が重くなりにくく、まとめ側は次に実行するまで「その朝の時点の内容」のままです。
反対に、元のシートを直しても、次に実行するまではまとめ側に反映されません。また、実行のたびにまとめ用のシートを書き直すので、まとめ側に手で書いたメモは消えます。
このあたりは、どちらが合うかを使い方に合わせて選びます。
この見本は、列の並びがそろったシートを、同じファイルの中でまとめるものです。
列の並びがシートごとに違う場合は「見出しの名前で列を合わせる」処理を、別ファイルをまとめる場合は「ファイルを順に読み込む」処理を、今の表に合わせて追加して作ります。
自分でやるのが大変なときは
・今の数式を、担当者が増えても書き足さなくて済む形に直したい
・列の並びがばらばらのシートを、まとめられるようにしたい
・毎朝自動でまとめるしくみを入れたい
こうしたご相談は、ココナラの出品「スプレッドシートの集計・転記をGASで自動化します」で受け付けています(できることの例④「複数シートの自動まとめ」です)。
・作ったコードは、すべてお渡しします(コメントつきなので、あとから変更しやすい形です)
・使い方の説明書をお付けします
・ご購入の前に、メッセージで「できるかどうか」と総額をお伝えします
まずはメッセージで、今の表の形と、やりたいことを教えてください。
(実際のデータではなく、今の表のスクリーンショットか、列の名前の一覧をトークルームで送っていただければ大丈夫です。お名前などは隠してください)