支店ごと、月ごと、担当者ごとに分かれたシートを、月末に1枚へまとめる。この作業を手でやっている方は多いと思います。
自動化そのものは難しくありません。ただ、作る前に決めていないと、あとから作り直しになる項目が4つあります。順番に書きます。
■ その前に、手作業が事故る瞬間
手でコピペする集約が崩れるのは、だいたい次の3つの瞬間です。
1つ目は、貼り付け先の行がずれたとき。1行ずれたことに気づかないまま集計まで進むと、数字は合わないのに、どこで狂ったのかが分かりません。
2つ目は、シートが増えたとき。新しい支店が増えたのに集計範囲が古いままで、その支店だけ抜けている。翌月まで誰も気づかない、というのがよくある形です。
3つ目は、列の並びが変わったとき。誰かが列を1つ挿入しただけで、それ以降の貼り付けが全部ずれます。
共通しているのは、間違えても画面上は正常に見えることです。だから自動化の目的は「速くすること」よりも「ずれても気づけるようにすること」だと考えています。
■ 1. どのシートを対象にするか
いちばん最初に決めるところです。方法は3つあります。
・名前で選ぶ:「支店_」で始まるシートを全部、のように条件で拾う
・位置で選ぶ:左から3枚目以降、のように並び順で拾う
・除外で選ぶ:集約先とテンプレート以外は全部、のように残りを拾う
シートが毎月増えていくなら、名前か除外で選ぶ形にします。ここを「支店A、支店B、支店C」と直接書いてしまうと、支店が増えるたびに中身を書き換えることになります。自動化したのに毎月手を入れる、という状態はここから生まれます。
■ 2. 見出しがシートごとに違うときどうするか
現場のシートは、たいてい揃っていません。「金額」と「売上金額」が混ざっている、片方だけ「備考」の列がある、といったことが起きます。
決めるのは次のどれかです。
・揃える:先に見出しを統一してから集約する
・対応表を持つ:「売上金額」は「金額」として扱う、という変換表を用意する
・位置で読む:見出しを見ずにA列B列C列として扱う
いちばん壊れにくいのは対応表を持つ方法です。位置で読む方法は最初は楽ですが、列が1つ挿入された瞬間に静かに壊れます。
■ 3. 追記なのか、洗い替えなのか
集約先に対して、下に足していくのか、毎回まっさらにして作り直すのか。
追記は履歴が残る代わりに、同じデータを二度足す事故が起きます。洗い替えは事故が起きない代わりに、集約先に手で書き足したメモが消えます。
ここを決めずに作ると、たいてい「気づいたら二重に入っていた」か「メモが消えた」のどちらかが起きます。集約先には手で何も書かない、と決めてしまうのがいちばん揉めません。
■ 4. いつ実行するか
手動でボタンを押すか、時間を決めて自動で動かすかです。
自動実行は楽ですが、元のシートが書きかけの状態で走ると、中途半端なデータで集約されます。締めの日が決まっているなら、手動ボタンのほうが安全なことは多いです。
自動にするなら、実行した日時と対象シートの一覧をログとして残しておくと、あとで「この数字はいつ時点のものか」が分かります。
■ 決めずに作ると何が起きるか
この4つを決めずに作ると、動くものはできます。ただ、翌月に支店が1つ増えた時点で動かなくなり、直せる人がいなくて手作業に戻る、という結末になりがちです。
逆に言えば、この4つさえ決まっていれば、あとは書くだけです。決めることのほうが、書くことより時間がかかります。
■ おわりに
私は普段、こうした集約をGoogle Apps Scriptで自動化する仕事をしています。コードは全文お渡しして、設置の手順も添えるようにしています。ご自身で作られる場合も、上の4つを先に紙に書き出してから始めると、作り直しが減ると思います。
最後までお読みいただきありがとうございました。