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

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

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

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

Google Apps Script

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

解決済

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

donguriko
donguriko

総合スコア14

変数

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

Google Apps Script

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

1回答

0評価

0クリップ

333閲覧

投稿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/ツールのバージョンなど)

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

donguriko

2022/01/09 10:09

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

2022/01/09 10:10

ありがとうございます。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

変数

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

Google Apps Script

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