前提・実現したいこと
基本的な質問でしたら申し訳ありません。
非エンジニアのGASビギナーです。
独学で「GAS本」引き引き、ネットで調べたりして目下GASと格闘中。
これが2作目のGASです。
GASで以下の作業をさせたいです。
①mySheetnameを生成
YYMMDD(openDate) - YYMMDD(その週の金曜日の日付※<<closeDate)
※IF文で、GAS実行日の曜日に応じて+n日後の日付を
Utilities.formatDateで求めました。
②同じ名前のシートが存在しているか確認
存在している場合⇒Msg表示で処理終了
存在していない場合⇒下記③以降の処理へ進む
③スプレッドシート内の「ひな形シート」をコピー
④上記③の「新シート」を一番左から2番目に移動
⑤上記③のシート名を①の名称に変更
発生している問題・エラーメッセージ
処理①で、
1つ目の「GAS実行日(openDate)」の取得はできました。
また、2つ目の「その週の金曜日の日付(closeDate)」も取得できました。
(console.logで確認済)
ですが、「GAS実行日(openDate)」と「その週の金曜日の日付(closeDate)」の
合体処理がうまくできません。
ちなみに処理⑤で
ss.rename(mySheetName)で(新シート名)で新シート名を変更させようと
思っています。
###エラーメッセージ
ReferenceError: mySheetName is not defined
myFunction2 @ 週次入力シート作成.gs:53
該当のソースコード
長文となりますが、記載したコード全文を記載します。
function myFunction2() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const date = Utilities.formatDate(new Date(), 'Asia/Tokyo','yyyyMMdd');
//「入力シート」の「終了日」指定準備_「開始日」曜日の判定
const openDate = new Date()
const o=Utilities.formatDate(openDate, 'Asia/Tokyo', 'yyyyMMdd');
const openDay = openDate.getDay()
console.log(openDay);
console.log(o);
//(条件1)「開始日」が月曜のとき「終了日」は4日後をセット
if (openDay ==1) {
const closeDate =new Date(openDate.setDate(openDate.getDate() + 4));
const c = Utilities.formatDate(closeDate, 'Asia/Tokyo', 'yyyyMMdd');
console.log(c);
//(条件2)火曜のとき「終了日」は3日後をセット
}else if (openDay ==2) {
const closeDate =new Date(openDate.setDate(openDate.getDate() + 3));
const c =Utilities.formatDate(closeDate, 'Asia/Tokyo', 'yyyyMMdd');
console.log(c);
//(条件3)水曜のとき「終了日」は2日後をセット
}else if (openDay ==3) {
const closeDate =new Date(openDate.setDate(openDate.getDate() + 2));
const c =Utilities.formatDate(closeDate, 'Asia/Tokyo', 'yyyyMMdd');
console.log(c);
//(条件4)木曜のとき「終了日」は1日後をセット
}else if (openDay ==2) {
const closeDate =new Date(openDate.setDate(openDate.getDate() + 1));
const c =Utilities.formatDate(closeDate, 'Asia/Tokyo', 'yyyyMMdd');
console.log(c);
//(条件5)金曜のとき
}else if (openDay ==1) {
const closeDate =setDate(openDate.getDate());
const c =Utilities.formatDate(closeDate, 'Asia/Tokyo', 'yyyyMMdd');
console.log(c);
//(条件6)それ以外のとき 当日日付をセット
}else {
const closeDate =setDate(openDate)
const c =Utilities.formatDate(closeDate, 'Asia/Tokyo', 'yyyyMMdd');
console.log(c);
//★ここで失敗していそうです!! 「実行」クリックしてもここから先の処理は行われていない。
const mySheetName = o + "-" + c
console.log(mySheetName);
}
// すでに「入力シート」が作られていたらメッセージ1を表示し、処理終了
if (ss.getSheetByName(mySheetName) != null) {
Browser.msgBox("今週分のシートはすでに「作成済」です。\n処理を中止します。\nファイル内のシートをもう一度確認してください。");
//存在しない場合は、処理継続
}else{
//「週報ひな形」シートをコピーし(一番右に追加される)新「入力シート」を左から2番目に移動する。(一番左は「ひな形」)
sh_temp1.copyTo(ss).activate();
ss.moveActiveSheet(2);
//「シートA」の氏名(C2)の内容を「入力シート」にコピー
const sh_temp2 = ss.getSheetByName("シートA");
const sh_new = ss.getSheetByName("週報ひな形 のコピー");
//コピー元のシートの中のセルを指定
const copyValue1 = sh_temp2.getRange('C2').getValues();
//コピー先のシートの中のセルを指定して、コピー実行
sh_new.getRange('E4').setValues(copyValue1);
//「シートA」の項目①(C6)の内容を「入力シート」にコピー
//コピー元のシートの中のセルを指定
const copyValue2 = sh_temp2.getRange('C6').getValues();
//コピー先のシートの中のセルを指定して、コピー実行
sh_new.getRange('E6').setValues(copyValue2);
//「シートA」の項目②(C7)の内容を「入力シート」にコピー
//コピー元のシートの中のセルを指定
const copyValue3 = sh_temp2.getRange('C7').getValues();
//コピー先のシートの中のセルを指定して、コピー実行
sh_new.getRange('E7').setValues(copyValue3);
//「シートA」の項目③(C8)の内容を「入力シート」にコピー
//コピー元のシートの中のセルを指定
const copyValue4 = sh_temp2.getRange('C8').getValues();
//コピー先のシートの中のセルを指定して、コピー実行
sh_new.getRange('E8').setValues(copyValue4);
//「入力シート」のシート名編集
const sh_temp1 = ss.getSheetByName("週報ひな形");
const mySheetname = ss.rename(+openDate + "-" + closeDate)
console.log(mySheetName);
//シート追加のメッセージ2を表示
Browser.msgBox("今週分の入力シートを作成しました。内容を入力してください。");
}
}
どこがマズく、どう修正すればよいかアドバイスをいただけないでしょうか?
お忙しいところ申し訳ありませんがGASビギナーでも分かるよう解説いただける
と助かります。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー