7店舗のスプレッドシートを GAS で集約するなら、列は位置ではなく見出しの名前で探す
7店舗のスプレッドシートを Google Apps Script(GAS)で1つに集約しています。列の位置で読むと、列を1つ足しただけで数字がずれ、エラーにもなりません。見出しの名前で列を探す作りと、設定のシート、毎晩の書き直しの記録です。

Google Apps Script(GAS。スプレッドシートなどを動かす Google のプログラム)で複数のスプレッドシートを集約する時は、列を位置(C列、F列)ではなく、見出しの名前で探すのが答えです。列の位置で読むと、誰かが列を1つ足しただけで右の数字が全部ずれ、しかもエラーにならないからです。
私たちのグループでは、7つの店舗がそれぞれ自分のスプレッドシートで、日々の記録を付けています。これを Google Apps Script(GAS。Google のスプレッドシートなどを動かすプログラム)で1つにまとめ、全店の数字を並べて見られるようにしています。
まとめる仕組みを作る時に、一番気をつけたのは「列の探し方」です。列の位置で読むと、店舗の誰かが列を1つ足しただけで、数字がずれてしまいます。この記事は、見出しの名前で列を探す作りにした理由と、ほかに決めたことの記録です。

GAS で列の位置で読むと、何が起きるか
GAS でシートを読む時、いちばん簡単なのは「C列が日付、F列が金額」のように、列の位置を決め打ちにすることです。

7店舗もあると、すべての店舗のシートの形を、ずっと同じに保ってもらうのは現実的ではありません。

見出しの名前で、列を探す
function readRows(sheet, names) {
const values = sheet.getDataRange().getValues();
const header = values[0].map(String).map(s => s.trim());
const index = {};
for (const name of names) {
const i = header.indexOf(name);
if (i < 0) throw new Error(sheet.getName() + ' に「' + name + '」の列がありません');
index[name] = i;
}
return values.slice(1).map(row => {
const obj = {};
for (const name of names) obj[name] = row[index[name]];
return obj;
});
}
集客の経路の分け方は、設定のシートで決める
お客様がどこから来たか(集客の経路)を、どう分けて数えるかも決める必要があります。

毎晩、全部を書き直し、変わったところを記録する
まとめた表は、毎晩、全部を読み直して書き直しています。前の日の結果に差分だけを足していく作りにはしませんでした。


あわせて、前の晩の結果と比べて、どこが変わったかを記録に残しています。数字が急に変わった時も、どの記録が直されたのかを、あとから追えます。
まとめ

- 複数のスプレッドシートをまとめる時、列の位置で読むと、列を足しただけで数字がずれる
- 1行目の見出しの名前から、列の場所をその都度探す
- 集客の経路の分け方は、設定のシートに書き、プログラムを直さずに変えられるようにする
- 毎晩全部を書き直し、変わったところを記録する
この集計の画面を、GAS からレンタルサーバーに移した話は、こちらに書いています。
業務の自動化GAS の Web アプリが遅い時は、画面だけをレンタルサーバーに移すGAS の Web アプリ(GAS で作れる Web ページ)の表示が遅い時は、集約の GAS とスプレッドシートを残し、画面だけをレンタルサーバーの HTML と PHP に移す手があります。いきなり切り替えず、両方を並べて動かした進め方の記録です。
この記事は、AI(Claude)の支援を受けて作成し、筆者が内容を確認しています。

