##![イメージ説明実現したいこと
非エンジニアのGASビギナーです。
お忙しいところ申し訳ありません、2点教えてください。
お返事は明日以降でも大丈夫です。
やりたいこと
スプレッドシートで1か月分(列)月~日×(行)6週の1か月分×12か月分の
表形式★のシフト表を作成予定。
各日の入力欄は、担当ごとに4行×2列(AM、PM)の8つの入力欄に分かれています。
最終的はシフト表のデータをGASでGoogleカレンダーに「
「終日予定」として連携、登録したいと思っています。
が、表形式から直接カレンダーへの連携はハードルが高いので、
①表形式シフト表→別スプレッドシート☆にデータ転記。
②別スプレッドシート→カレンダー連携の2ステップで進めようと思っています。
☆年月を指定で縦方向の日数が可変する万年カレンダー式。
縦方向に1日~末日までの日付。
横方向に、担当ごとの転記欄を4列。
転記の際、表形式のAMデータとPMデータを合体させて担当ごとの転記欄に
データコピーさせたい。
今回①の入り口の部分で躓いています。
※最初から☆形式でシフト表作成した方が容易なのですが、
ユーザーから表形式がよいとの強い要望があり、苦戦中です。
発生している問題・エラーメッセージ
①表形式シフト表から、水平方向で各担当のAM、PMデータを取得(一次元配列?)。
AM、PMデータを合体させ、☆スプレッドシートの1個のセルにデータコピー
させたいのですが、合体処理もしくは、コピー先の指定がうまくできていない
ようで下のエラーがたっています。
どこが間違えていて、どのように直せばよいか、アドバイスをいただけます
でしょうか?
配列で取得したデータにつき、以前もレクチャーいただいたのですが
理解が不十分のようで再度の質問となり申し訳ありません。
・joinができていない?
・配列データnakano4の定義がおかしい?
・getRange(3,12).setValue(nakano4); getRangeの定義がおかしい?
②今の案では、
各日の担当ごとの一元配列データごとに取得させようとしていますが、
1か月6週分のうち1週目分だけでかなりの量の記載となっています。
もし、担当1AMPM+担当2AMPM+担当3AMPM+担当4AMPM と4担当分をすべて
合体させて1つのデータとして団子にし、☆スプレッドシートに渡すことが
できれば、今の「泥臭い」やり方よりも団子方式の方がよいですか?
団子方式がおススメの場合は、大変申し訳ありませんが今の私の知識では
「やり方(二次元配列→1個の団子)」がわからなので、ビギナーでも自分で
調べながら進めていけそうなレベルでよいので、「やり方」のアドバイス、
ヒントをいただけないでしょうか?
※今回【条件4】に該当するケースでGAS実行 Exception: The parameters () don't match the method signature for SpreadsheetApp.Range.setValue. OriginalData @ 転記元シート作成.gs:292
該当のソースコード
全文記載します。(長文ご容赦を)
function OriginalData() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sh = ss.getActiveSheet(); const mysheet1 = ss.getSheetByName("転記元"); const mysheet2 = ss.getSheetByName("【メモ】日付算出"); const myMonth =mysheet2.getRange('D3').getValues(); const mySheetname= myMonth+"月"; const mysheet3 = ss.getSheetByName(mySheetname); //「日付算出」シート「1日の曜日」を取得 const firstDay = mysheet2.getRange('E8').getValues(); console.log(firstDay); //【条件1】 1日の曜日が「1:月」のとき「転記元」シート(L)にコピー //1週目 月曜-------------------------------- if (firstDay == 1) { //XX分 const copyValue1 = mysheet3.getRange('C6:D6').setValue(); const nakano1 = copyValue1.join; console.log(nakano1); mysheet1.getRange(3,12).setValue(nakano1); //XX分 const copyValue2 = mysheet3.getRange('C7:D7').setValue(); const nakanoMC1 = copyValue2.join; console.log(nakanoMC1); mysheet1.getRange(3,13).setValue(nakanoMC1); //XX分 const copyValue3 = mysheet3.getRange('C8:D8').setValue(); const Tele1 = copyValue3.join; console.log(Tele1); mysheet1.getRange(3,14).setValue(Tele1); //XX分 const copyValue4 = mysheet3.getRange('C99:D9').setValue(); const Holiday1 = copyValue4.join; console.log(Holiday1); mysheet1.getRange(3,15).setValue(Holiday1); //1週目 火曜-------------------------------- //XX分 const copyValue5 = mysheet3.getRange('E6:F6').setValue(); const nakano2 = copyValue5.join; console.log(nakano2); mysheet1.getRange(4,12).setValue(nakano2); //XX分 const copyValue6 = mysheet3.getRange('E7:F7').setValue(); const nakanoMC2 = array.join; console.log(nakanoMC2); mysheet1.getRange(4,13).setValue(nakanoMC2); //XX分 const copyValue7 = mysheet3.getRange('E8:F8').setValue(); const Tele2 = array.join; console.log(Tele2); mysheet1.getRange(4,14).setValue(Tele2); //XX分 const copyValue8 = mysheet3.getRange('E9:F9').setValue(); const Holiday2 = array.join; console.log(Holiday2); mysheet1.getRange(4,15).setValue(Holiday2); //1週目 水曜-------------------------------- //XX分 const copyValue9 = mysheet3.getRange('G6:H6').setValue(); const nakano3 = copyValue9.join; console.log(nakano3); mysheet1.getRange(5,12).setValue(nakano3); //XX分 const copyValue10 = mysheet3.getRange('G7:H7').setValue(); const nakanoMC3 = copyValue10.join; console.log(nakanoMC3); mysheet1.getRange(5,13).setValue(nakanoMC3); //XX分 const copyValue11 = mysheet3.getRange('G8:H8').setValue(); const Tele3 = copyValue11.join; console.log(Tele3); mysheet1.getRange(5,14).setValue(Tele3); //XX分 const copyValue12 = mysheet3.getRange('G9:H9').setValue(); const Holiday3 = copyValue12.join; console.log(Holiday3); mysheet1.getRange(5,15).setValue(Holiday3); //1週目 木曜-------------------------------- //XX分 const copyValue13 = mysheet3.getRange('I6:J6').setValue(); const nakano4 = copyValue13.join; console.log(nakano4); mysheet1.getRange(6,12).setValue(nakano4); //XX分 const copyValue14 = mysheet3.getRange('I7:J7').setValue(); const nakanoMC4 = copyValue14.join; console.log(nakanoMC4); mysheet1.getRange(6,13).setValue(nakanoMC4); //XX分 const copyValue15 = mysheet3.getRange('I8:J8').setValue(); const Tele4 = copyValue15.join; console.log(Tele4); mysheet1.getRange(6,14).setValue(Tele4); //XX分 const copyValue16 = mysheet3.getRange('I9:J9').setValue(); const Holiday4 = copyValue16.join; console.log(Holiday4); mysheet1.getRange(6,15).setValue(Holiday4); //1週目 金曜-------------------------------- //XX分 const copyValue17 = mysheet3.getRange('K6:L6').setValue(); const nakano5 = array.join; console.log(nakano5); mysheet1.getRange(7,12).setValue(nakano5); //XX分 const copyValue18 = mysheet3.getRange('K7:L7').setValue(); const nakanoMC5 = array.join; console.log(nakanoMC5); mysheet1.getRange(7,13).setValue(nakanoMC5); //XX分 const copyValue19 = mysheet3.getRange('K8:L8').setValue(); const Tele5 = copyValue19.join; console.log(Tele5); mysheet1.getRange(7,14).setValue(Tele5); //XX分 const copyValue20 = mysheet3.getRange('K9:L9').setValue(); const Holiday5 = array.join; console.log(Holiday5); mysheet1.getRange(7,15).setValue(Holiday5); ~略~ //【条件4】 1日の曜日が「4:木」のとき「転記元」シート(L)にコピー }if (firstDay == 4) { //1週目 木曜-------------------------------- //XX分 const copyValue13 = mysheet3.getRange('I6:J6').setValue(); const nakano4 = copyValue13.join; console.log(nakano4); mysheet1.getRange(3,12).setValue(nakano4); //★ここでエラー。 //XX分 const copyValue14 = mysheet3.getRange('I7:J7').setValue(); const nakanoMC4 = copyValue14.join; console.log(nakanoMC4); mysheet1.getRange(3,13).setValue(nakanoMC4); //XX分 const copyValue15 = mysheet3.getRange('I8:J8').setValue(); const Tele4 = copyValue15.join; console.log(Tele4); mysheet1.getRange(3,14).setValue(Tele4); //XX分 const copyValue16 = mysheet3.getRange('I9:J9').setValue(); const Holiday4 = copyValue16.join; console.log(Holiday4); mysheet1.getRange(3,15).setValue(Holiday4); //1週目 金曜-------------------------------- //XX分 const copyValue17 = mysheet3.getRange('K6:L6').setValue(); const nakano5 = array.join; console.log(nakano5); mysheet1.getRange(4,12).setValue(nakano5); //XX分 const copyValue18 = mysheet3.getRange('K7:L7').setValue(); const nakanoMC5 = array.join; console.log(nakanoMC5); mysheet1.getRange(4,13).setValue(nakanoMC5); //XX分 const copyValue19 = mysheet3.getRange('K8:L8').setValue(); const Tele5 = copyValue19.join; console.log(Tele5); mysheet1.getRange(4,14).setValue(Tele5); //XX分 const copyValue20 = mysheet3.getRange('K9:L9').setValue(); const Holiday5 = array.join; console.log(Holiday5); mysheet1.getRange(4,15).setValue(Holiday5); //【条件5】 1日の曜日が「5:金」のとき「転記元」シート(L)にコピー }if (firstDay == 5) { //1週目 金曜-------------------------------- //XX分 const copyValue17 = mysheet3.getRange('K6:L6').setValue(); const nakano5 = array.join; console.log(nakano5); mysheet1.getRange(3,12).setValue(nakano5); //XX分 const copyValue18 = mysheet3.getRange('K7:L7').setValue(); const nakanoMC5 = array.join; console.log(nakanoMC5); mysheet1.getRange(3,13).setValue(nakanoMC5); //XX分 const copyValue19 = mysheet3.getRange('K8:L8').setValue(); const Tele5 = copyValue19.join; console.log(Tele5); mysheet1.getRange(3,14).setValue(Tele5); //XX分 const copyValue20 = mysheet3.getRange('K9:L9').setValue(); const Holiday5 = array.join; console.log(Holiday5); mysheet1.getRange(3,15).setValue(Holiday5); //【条件6】 1日の曜日が「6:土」「7:日」のとき何もしない }else{ return;} }
補足情報(FW/ツールのバージョンなど)
GASの知識が浅いため、ビギナーでも理解できるよう解説いただけると
助かります。
回答2件
あなたの回答
tips
プレビュー