前提・実現したいこと
スプレッドシートのF列に「1」のフラグありのイベントIDの予定に対し、
下記の2つの処理をさせたいです。
①F列に「1」のフラグありの場合、Googleカレンダーから予定削除(キー項目はイベントID)
②スプレッドシートG列に「削除済」と追記
カレンダー登録済予定をスプレッドシートに書出したイメージ(B列~E列)
※スプレッドシートに書き出された予定に対し、削除する予定(1/3 テスト13)の
F列に「1」をフラグ立てしています。
発生している問題・エラーメッセージ
下のコードで上記①の処理まではできました。
が、上記②の処理の際、「変数i」が特定できないようで、エラーとなってしまいます。
for分ブロックの中にif文ブロックを記載しています。
(なお、コード38行目でエラーで処理が止まってしまっているため、38行目以降の
処理が問題なく走るかは未確認です。)
<質問①>
エラーの原因は、38行目で使用している「変数i」が同一ブロック内でletで定義
されていないからですか? (1つ上のfor文ブロック内で定義)
「変数i」は、使用するブロック内での定義が必要、ブロックをまたがっての使用は
NGということですか?
<質問②>
知識不足で恐縮です。
どのように修正すればエラー回避できるかが思いつきません。
修正方法のアドバイスをいただけないでしょうか?
ReferenceError: i is not defined deleteEventById @ <処理3>予定の削除(登録確認シート→カレンダー).gs:38
該当のソースコード
以下にコード全文を記載します。
function deleteEventById() { //<処理3>「登録確認用」シート F列(削除フラグ)に「1」の予定を削除する //▼カレンダー・スプレッドシートの取得 const ss = SpreadsheetApp.getActiveSpreadsheet(); const mysheet1 = ss.getSheetByName("登録確認用"); //const calId = mysheet1.getRange(3,4).getValue(); //セルD3 const cal = CalendarApp.getCalendarById(calId); //▼配列(myEvents)としてデータを取得 //スプレッドシートのデータ取得範囲を指定 //セルE16(16行目、5列目)~最終行、F列まで getRange(●行目,●列目,●行分,●列分) const LastRow = mysheet1.getLastRow(); const eventsRange = mysheet1.getRange(16, 5, LastRow, 2); const myEvents = eventsRange.getValues(); console.log(myEvents); console.log(myEvents.length); //▼配列(myEvents)から削除フラグ(F列)に「1」があるイベントIDデータを抽出 //削除フラグ(F列)は起点(セルE16)から下にi行目、右に1列目 //抽出したデータは(targetId)とする for (let i = 0; i < myEvents.length; i++) { let delFlag = myEvents[i][1] let targetId = myEvents[i][0]; //▼削除フラグがある予定(targetId)を指定カレンダー(cal)から削除する if (delFlag === 1) { const targetEvent = cal.getEventById(targetId); targetEvent.deleteEvent(); //▼削除した予定はスプレッドシートに「削除済」と追記する //貼付け範囲はセルG16(16行目、7列目)~LastRowまで //getRange(開始行, 開始列, 1行分, 1列分) mysheet1.getRange(16 + i, 7, 1, 1).setValue("削除済"); //配列(myEvents)の削除フラグ(delFlag)[i][1]が「1」ではない場合は処理スキップ } else { continue; } //Msgboxの表示 Browser.msgBox("予定削除を行いました。\nカレンダーで予定が削除されていることをご確認ください。", Browser.Buttons.OK) } }
補足情報(FW/ツールのバージョンなど)
お忙しいところ初歩的な質問で申し訳ありません。
回答は本日中でなくて大丈夫です。
次回から類似のケースで自力解決できるようになりたいので、非エンジニアビギナー
でも理解できるレベルでのアドバイス、解説をいただけると助かります。
お忙しいところ、お手数をおかけして申し訳ありません。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー