端的に
1、特定の状況の時だけ実行されるGASを記述する
2、セルの変更時トリガーを用意する
3、データの入力規則で -- と 実行 などを用意する
特定の時だけ実行されるGAS
特定シートという名前のシートで M列=13列目 のセルが変更されたら動くGAS
function onTrig1(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var sheetName =sheet.getName();
//******「特定のシート」だったら ******
if(sheetName=="特定のシート"){
var activeCell = sheet.getActiveCell();
var value_snd=activeCell.getValue();
var row = activeCell.getRow();
var column = activeCell.getColumn();
//******13列目でセルの値が「送信」だったら ******
if(column==13&&value_snd=="送信"){
var val=sheet.getRange(row,column-1).getValue();
var emailAddress = "abc@def.com";
var bod="メール<br />本文"
GmailApp.sendEmail(emailAddress, "スプレッドシートの値",'', {htmlBody: bod});
//******送信->「--」などに戻す ******
activeCell.setValue("--");
}
}
}
セルの編集時トリガー
トリガー -> トリガーの追加 -> 実行する関数を選択で「ファンクション名を選択」(例:onTrig1) -> イベントの種類で「変更時」 を選択
データの入力規則で疑似スイッチを作成
実行
設置した入力規則を 「--」から「送信」に変更すると
GASが実行され 終了すると GAS自身で 入力規則を「--」に戻す
入力規則であればコピーが容易。
アクティブセルが使えるので複数のGASも不要。実行位置で制御できる。
設置したい 列 が異なる場合はGAS(例:column==13)も変更が必要なので注意。
なぜ作成したか
GASを実行したいが複数ある場合ボタンなどを増やしたりするのが大変
そもそも画像だとアクティブ処理取得が効かないのでGASを増やさないといけない。
トリガー追加だともっさり動作になるのでは?と思っての追加でしたが
全く違和感ディレイ感もなく動作しました。
AiGeminiに聞いたらリンクの挿入で「javascript:google.script.run.onTrig1();」
で一発!というガセネタの一点張りから始まった。
そもそも「不正なurl判定」で適用すら出来ず。
ウェブアプリ化デプロイ や =HyperLinkでいれてみたり
GASのURLを=HyperLinkに入れろ というガセ情報もつかまされ
非常に遠回りをしての発見。