質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1083閲覧

【GAS】変数i とブロックの関係

donguriko

総合スコア30

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2022/01/09 09:56

編集2022/01/09 10:08

前提・実現したいこと

スプレッドシートの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/ツールのバージョンなど)

お忙しいところ初歩的な質問で申し訳ありません。
回答は本日中でなくて大丈夫です。
次回から類似のケースで自力解決できるようになりたいので、非エンジニアビギナー
でも理解できるレベルでのアドバイス、解説をいただけると助かります。
お忙しいところ、お手数をおかけして申し訳ありません。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

donguriko

2022/01/09 10:09

大変失礼いたしました。 コード全文の上下に「```」を追記しましたが、修正されましたでしょうか? 再度修正が必要な場合はご連絡ください。 お手数をおかけして申し訳ありません。
退会済みユーザー

退会済みユーザー

2022/01/09 10:10

ありがとうございます。
guest

回答1

0

ベストアンサー

iが全角の「i」になっています。

diff

1 //▼削除フラグがある予定(targetId)を指定カレンダー(cal)から削除する 2 if (delFlag === 1) { 3 const targetEvent = cal.getEventById(targetId); 4 targetEvent.deleteEvent(); 5 6 //▼削除した予定はスプレッドシートに「削除済」と追記する 7 //貼付け範囲はセルG16(16行目、7列目)~LastRowまで 8 //getRange(開始行, 開始列, 1行分, 1列分)  9- mysheet1.getRange(16 + i, 7, 1, 1).setValue("削除済"); 10+ ​mysheet1.getRange(16 + i, 7, 1, 1).setValue("削除済"); 11 //配列(myEvents)の削除フラグ(delFlag)[i][1]が「1」ではない場合は処理スキップ 12 } else { 13 continue; 14 }

投稿2022/01/09 10:09

編集2022/01/09 10:11
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

donguriko

2022/01/09 10:17

qnoirさま いいところまで来てる筈なのに何がダメなんだろう、と散々悩んでいましたが そんな初歩の初歩で躓いていたとは。。。情けないてす。 お忙しいのにお手を煩わせてしまい本当に申し訳ありません。 過去数回の質問のアドバイスで、かなり時間がかかりましたがやっと 完成が見えてきました。 ここまでアドバイス本当にありがとうございました。(感謝)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問