前提
リンク先の質問の前工程処理です。→質問リンク
スプレッドシート内に下の2つのシートがあります。
①入力シート
②マージシート
GASで①→②への転記処理と①への「転記済」表示の追記をさせます。
転記処理のコードは全3ステップに分けてコード記載しました。
実現したいこと
3ステップの処理が完了したら、処理が完了した旨の
ダイアログボックスを画面表示させ、ツールユーザーに「OK」ボタンを
クリックしてもらい「作業完了」という動きを想定しています。
発生している問題・エラーメッセージ
記載したコードで全3ステップの転記処理は想定どおり動いていますが、
メッセージボックスが出てくるタイミングが自分の想定と違う出方を
しています。
(現)
下の状態でメッセージボックスが出てきます。
処理①のマージシートへの「依頼日」転記は済。
処理②のマージシートへの「識別番号(D列)」~「備考(G列)」転記は未。
処理③の入力シートへの「転記済」表示記載も未。
→OKボタンをクリックすると、処理②、③が実行されます。
違和感はあるものの、現在のタイミングでも、処理的には「実害」はない
のですが、今後の知識のために処理③まで完了後のタイミングで
メッセージボックスが出て来ない原因が知りたく質問しました。
a) Browser.msgBox のコードを記載する位置に誤りがありますか?
もしかするとブロックについてまだ理解しきれていないのでは?
という気がしています。
b) 現コードをどのように修正すれば、「実現したいこと」欄に記載の
タイミングでメッセージボックスが表示されるようになりますか?
該当のソースコード
以下にコード全文を記載します。
GAS
1function copyToMerge() { 2 const ss = SpreadsheetApp.getActiveSpreadsheet(); 3 const mySheet1 = ss.getSheetByName("入力シート"); 4 const mySheet2 = ss.getSheetByName("マージシート"); 5 6 //転記が必要な行数(targetRows)を取得 7 const InMaxRow = mySheet1.getRange(5, 4).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); 8 const targetRows = InMaxRow - 5; 9 console.log("InMaxRow " + InMaxRow); //12が出れば正解 10 console.log("targetRows " + targetRows); //7が出れば正解 11 12 //▼①「依頼日」の転記 13 //入力シートの依頼日(c列)の値取得 14 const myDate = mySheet1.getRange("C6").getValue(); 15 console.log("myDate " + myDate); //2022/04/02が出れば正解 16 17 //マージシートのデータあり最終行(OutMaxRow)を取得 18 const OutMaxRow = mySheet2.getRange(mySheet2.getMaxRows(), 4).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); 19 console.log("OutMaxRow " + OutMaxRow); //19が出れば正解 20 21 //マージシートの依頼日(c列)にmyDateの内容を転記する。 22 for (let i = OutMaxRow +1; i <= OutMaxRow +targetRows ; i++) { 23 mySheet2.getRange(i, 3).setValue(myDate); 24 } 25 26 //▼②「識別番号(D列)」~「備考(G列)」を転記。 27 //getRange(行,列,●行分,●列分); 28 const myDeta = mySheet1.getRange(6, 4, targetRows, 4).getValues(); 29 console.log("myDeta " + myDeta); 30 const outRange1 = mySheet2.getRange(OutMaxRow +1, 4, targetRows, 4); 31 console.log(outRange1.getA1Notation()); //D20:G26が出れば正解 32 outRange1.setValues(myDeta); 33 34 //▼③入力シートに「転記済」表示を追記する。 35 const outRange2 = mySheet1.getRange(6, 2, targetRows, 1); 36 console.log(outRange2.getA1Notation()); //D20:G26が出れば正解 37 outRange2.setValue("転記済"); 38 39 //▼完了Msgの表示 40 Browser.msgBox("マージシートへの転記処理が完了しました。\\n転記済の表示があれば問題なく転記できています。", Browser.Buttons.OK); 41}
補足情報(FW/ツールのバージョンなど)
以前から、自分の書いたコードでのメッセージボックスの出てくる
タイミングにずっと違和感を感じており、今後の自分の知識のための
質問となりますので、回答は急ぎません。
回答はお時間がある時で大丈夫です。
本日、2度目の質問、連投となり申し訳ありません。
お忙しいところ申し訳ありませんが、解説をいただけないでしょうか?

回答1件
あなたの回答
tips
プレビュー