見出し画像

嬉しいことに、巧妙に仕掛けた罠がバレました...(すみません...

全国共通テイクアウトマップ、本日PRTIMESでプレスを打ちました!

嬉しいことに、「自分も作ってみました」というお問い合わせをいただき、そこでわたしが仕掛けていた巧妙な罠が露呈してたため、この記事を執筆しております。

結論から言いますと、「作ってくれ!」はあっても、「作ってみます!」は少ないだろうなと思いサボってました!(笑)

以下で解決方法を記載していきます。

特定列の数式について

「全国共通テイクアウトマップ」のスプレッドシートをご覧いただくと、「テイクアウトマップ」シートのAI列〜AZ列と、「メニュー一覧」シートのH,I列に数式が入っていることがわかります。

スクリーンショット 2020-05-18 22.14.21

こちらが巧妙に仕掛けられた罠になっており、実はGlideのアプリから新規のレコードを追加した際にはこの数式は反映されません。なので、Google apps script(以下、GAS)と呼ばれるExcelでいうところのVBAのような仕組みを使って、レコードが追加されたら数式を既存の列からコピーしてくるという処理を加えています。

これがGlideアプリをコピーした際にもコピーはできているはずなのですが、「トリガー」という自動で動く設定を行う必要があることを失念しておりました。

トリガーの設定方法

「ツール」から「スクリプトエディタ」を選択します。

スクリーンショット 2020-05-18 22.26.27

表示された画面で、まずは下記のテキストを全てコピーして貼り付けてください。

/** @OnlyCurrentDoc */

function myFunction() {
 updateShop();
 updateMenu();
};

function updateShop() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sh = ss.getSheetByName("テイクアウトマップ");
 var last_rowBase = sh.getLastRow();
 for(let i = last_rowBase; i > 0; i--){
   if(sh.getRange(i, 1).isBlank()){
     sh.deleteRow(i);
   }
 }
 last_rowBase = sh.getRange("A:A").getValues().filter(String).length;
 var last_rowTarget = sh.getRange("AI:AI").getValues().filter(String).length;
 var diff = last_rowBase - last_rowTarget;

 for(let j = 1; j <= diff; j++){
   sh.getRange(last_rowTarget + j, 35, 1, 14).activate();
   sh.getRange('AI2:AV2').copyTo(sh.getActiveRange());
 }
};

function updateMenu() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sh = ss.getSheetByName("メニュー一覧");
 var last_rowBase = sh.getLastRow();
 for(let i = last_rowBase; i > 0; i--){
   if(sh.getRange(i, 1).isBlank()){
     sh.deleteRow(i);
   }
 }
 last_rowBase = sh.getRange("A:A").getValues().filter(String).length;
 var last_rowTarget = sh.getRange("H:H").getValues().filter(String).length;
 var diff = last_rowBase - last_rowTarget;

 for(let j = 1; j <= diff; j++){
   sh.getRange(last_rowTarget + j, 8, 1, 2).activate();
   sh.getRange('H2:I2').copyTo(sh.getActiveRange());
 }
};

貼り付けが完了したら、「編集」→「現在のプロジェクトのトリガー」と進んでください。

スクリーンショット 2020-05-18 22.27.02

表示された画面の右下にある「トリガーを追加」ボタンをクリックします。

スクリーンショット 2020-05-18 22.28.05

「イベントの種類を選択」で「変更時」を選択してください。

スクリーンショット 2020-05-18 22.28.43

最後に「保存」をクリックすれば完了です。(許可の確認画面が出ますのでそのまま進めてください)

万が一上記作業前にレコードを全て消してしまった場合

作成しているスクリプトが「既存のレコードから数式をコピペする」というものなので、すべてのレコードを削除してしまった場合はお手数ですが一度変更履歴から初版へ戻してください。

「ファイル」から「変更履歴」→「変更履歴を表示」と進みます。

スクリーンショット 2020-05-18 22.33.09

右メニューに表示される変更履歴から一番古い日付を選ぶとコピーした当時のファイルに戻すことができます。

そこからひと手間かかりますが、アプリもしくはスプレッドシート上で1件新たなレコードを追加してから、いらないレコードを全て削除してください。(メニューについても同様です)

スプレッドシート編集時の注意点

もしスプレッドシートに列を追加したい場合、「テイクアウトマップ」シートはBA列以降、「メニュー一覧」シートはJ列以降に追加してください。それより前に列追加してしまうとGASを修正しなければいけません。

どうしても無理だ...

簡単にアプリが作れるツールながらもこういった工夫をちりばめています。また、これからどんどんアップデートを掛けていく予定ですが、コピーしたバージョンから最新バージョンにあげるための手順は全てを事細かに発信していくことはできないと考えております。

以上の点からも無料でフルバックアップを行っておりますので、ぜひお力添えさせていただけますと幸いです。

ジョインはこちらから!


サポートいただいたお金はすべて事業の推進に利用させていただきます。 お読みいただいただけでも大変励みになります。 ありがとうございます!