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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Google Apps Script

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

解決済

【GAS】IF 複数分岐時のコード記載方法

donguriko
donguriko

総合スコア23

Google Apps Script

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

1回答

0リアクション

0クリップ

224閲覧

投稿2022/09/13 11:52

編集2022/09/13 11:54

前提

スプレッドシートファイルの中に以下の2つのシートがあります。

①転記元シート
イメージ説明
②(ひな形)転記先シート
イメージ説明

GASで次の処理をさせたいです。
□処理1:②のシートをコピーし、③当月分シートを作成
□処理2:①の内容を③のシートにコピー
処理が完了したら、処理証跡として③のシートにタイムスタンプを追記

実現したいこと

スプレッドシートファイルの中に当月シートが存在しているか否かで
処理を条件分岐させたいです。

●存在していない
→処理1+2を実行

●存在している
ポップアップMsgを表示
転記処理を「継続」する(OK)か「中止」する(CANCEL)かを
ユーザーに選択させる。

OKクリックの場合
処理2を実行

キャンセルクリックの場合
「処理終了」のポップアップを表示させ、何も行わず、
そのまま処理終了

発生している問題・エラーメッセージ

現コードだと「存在している」場合の処理は走る。

しかし、「存在していない」場合がうまくいかない。
「OK」クリックすると処理1は走るが、処理2が行われず終了。

(参考) 存在していない」場合の処理結果
イメージ説明
処理1に続けて、処理2も行わせたいのですが、
どこを、どのように修正すればよいのかがわかりません。

<質問1 >
修正方法のアドバイスが欲しいです。

<質問2>
キャンセルボタンクリック時で処理終了の際、return 
と書きましたが returnの使い方あっていますか?
return、continue、breakの使い分け方がよくわかりません。
(if、forでは、breakは使わない??)
どのように使い分けをすればよいかもレクチャーしてほしいです。     

該当のソースコード

以下、全文記載します。

GAS

function inport_Test() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const fromSheet = ss.getSheetByName("転記元"); const tempSheet = ss.getSheetByName("[ひな形]転記先"); const mySheetName = "2022年9月分"; const tosheet = ss.getSheetByName(mySheetName); //▼条件分岐:当月分シートが作成されているか //(trueの場合)ファイル内に当月分シートがない場合 //★うまくいかない★ 処理1しか行われない。処理2もさせたい。 if (tosheet === null) { //▼処理1:当日分の転記先シートを作成 //転記先シートをコピーし、新シートを一番左に作成 //新シートのシート名を変更 const newSheet = tempSheet.copyTo(ss).activate(); ss.moveActiveSheet(0); newSheet.setName(mySheetName); } //▼ファイル内に当月分シートがある場合(falseの場合) //処理をつつげる(OK) or 処理中止(cancel)のポップアップ表示 else { const res = Browser.msgBox("当月分シートは作成済です。\\n 転記処理を続けますか?", Browser.Buttons.OK_CANCEL); //▼「OK」ボタンをクリックの場合 //処理2から実施 if (res === "ok") { //「元シート(fromSheet)」のデータあり最終行取得 //C列にデータあり行で判定 const fromLastRow = fromSheet.getRange(fromSheet.getMaxRows(), 3).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); //6が正解 const fromtargetRows = fromLastRow - 3 console.log("fromLastRow " + fromLastRow); // 6が正解 console.log("fromtargetRows " + fromtargetRows); // 3が正解 //▼処理2:データ転記処理 //<処理2-1>転記元データの取得 //「元シート(fromSheet)」の「項目3(B列)」~「項目2(I列)」の内容を //二次元配列(mydetaRange)として取得 //getRange(●行、▲列、■行分、◆列分) const mydetaRange = fromSheet.getRange(4, 2, fromtargetRows, 8).getValues(); console.log("mydetaRange" + mydetaRange); for (let r = 0; r <= fromtargetRows - 1; r++) { //配列(mydetaRange)で取得した内容のうち転記したい項目 //[行インデックス][列インデックス] let deta3 = mydetaRange[r][0]; let deta4 = mydetaRange[r][1]; let deta5 = mydetaRange[r][2]; let deta6 = mydetaRange[r][3]; let deta7 = mydetaRange[r][4]; let deta8 = mydetaRange[r][5]; let deta1 = mydetaRange[r][6]; let deta2 = mydetaRange[r][7]; console.log(deta3); //<処理2-2>「転記先シート(toSheet)」に配列データを転記 //getRange(●行、▲列、■行分、◆列分) //B列に項目1(deta1)を転記 const mySheet = ss.getSheetByName("転記先"); const copydeta1 = tosheet.getRange(4 + r, 2, 1, 1).setValue(deta1); const copydeta2 = tosheet.getRange(4 + r, 3, 1, 1).setValue(deta2); const copydeta3 = tosheet.getRange(4 + r, 4, 1, 1).setValue(deta3); const copydeta4 = tosheet.getRange(4 + r, 5, 1, 1).setValue(deta4); const copydeta5 = tosheet.getRange(4 + r, 6, 1, 1).setValue(deta5); const copydeta6 = tosheet.getRange(4 + r, 7, 1, 1).setValue(deta6); const copydeta7 = tosheet.getRange(4 + r, 8, 1, 1).setValue(deta7); const copydeta8 = tosheet.getRange(4 + r, 9, 1, 1).setValue(deta8); //<処理2-3>タイムスタンプの追記 //getRange(●行、▲列、■行分、◆列分) //J列にタイムスタンプを転記 const timeStamp = new Date(); const setTimestamp = tosheet.getRange(4 + r, 10, 1, 1).setValue(timeStamp); } tosheet.activate(); Browser.msgBox("データ転記処理が完了しました。"); } //「キャンセル」ボタンをクリックの場合 //転記処理終了 if (res === "cancel") { Browser.msgBox("転記処理を中止します。"); return; } } }

補足情報(FW/ツールのバージョンなど)

回答は本日中でなくてもよいです。

非エンジニアビギナーです。
次回から自力解決できるようになりたいので、非エンジニアビギナー
でも理解できるレベルでの解説をいただけると助かります。
お忙しいところ申し訳ありませんが、どうぞよろしくお願いいたします。

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Google Apps Script

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。