以下のような実装でどうでしょう?
①トリガーとして時間主導型で実行する
②スクリプト内で実行日時を取得し、曜日判定を行う
③スプレッドシートの日付列を取得(getRange(), getValues(), flat()を使って配列で取得)
④実行日付の年月日と日付列の年月日が一致するものがあるかどうかを取得(filter()を使って一致する配列のみに絞り込む)
⑤なければメール通知を行う
色々調べてみたのですが、「無かったら」というものが見つからず困っております
→「無かったら」で調べるのではなく、「有ったら」何もしないとすればいいと思います。
すごくざっくりした作りになりますが下記のような作りにすればいいと思います。
function sendNotice() {
const today = new Date()
const dayOfWeek = today.getDay();
if (dayOfWeek === 0 || dayOfWeek === 6) {
// 0:日曜日 6:土曜日 の場合終了
return;
}
if (hasTodayRow()) {
// 今日の日付分があれば終了
return;
}
sendMail('example@example.com');
}
function hasTodayRow()
{
const ss = SpreadsheetApp.openById("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
const sheet = ss.getActiveSheet();
const lastRow = sheet.getLastRow();
const range = sheet.getRange(2, 1, lastRow - 1); // 1行目はヘッダ、A列に日付列があると想定、 A2セルから最終行 - 1(ヘッダ分)の範囲を取得
const values = range.getValues().flat();
const today = new Date();
const y = today.getFullYear();
const m = today.getMonth();
const d = today.getDate();
// 年月日が一致するものだけを取得
// スプレッドシート側の日付の入力が日付型想定(文字列で入力していれば文字列比較の実装にする必要あり)
const todayArray = values.filter(function(val) {
if (y !== val.getFullYear()) {
return false;
}
if (m !== val.getMonth()) {
return false;
}
if (d !== val.getDate()) {
return false;
}
return true;
})
// 今日の日付の行があればTrueを返す
return todayArray.length > 0;
}
function sendMail(address) {
const subject = '~~件名~~';
const body = `メール本文`;
GmailApp.sendEmail(address, subject, body);
}
トリガーとして時間主導型、日付ベースのタイマーにして時刻を選択すると良いと思いますが、例えば17時ジャストに動いてくれるわけでは無さそうです。
(ジャストで実行したい場合のやり方もあるようなので、そちらは別途ググってみてください)