前提・実現したいこと
GASでスプレッドシート①にあるデータを統合、一部データは加工。
加工したデータはシート①の元データに上書きし、
更新後のデータをシート②の該当箇所に書き込みたいです。
発生している問題・エラーメッセージ
エラーが発生し、作業が完了できない状態です。
パラメータ(number[])が SpreadsheetApp.Range.setValues のメソッドのシグネチャと一致しません。
該当のソースコード
GAS
1function accountupdate() { 2 3 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 var objSheet = objSpreadsheet.getSheetByName("組織情報紐付け用"); 5 var subSheet = objSpreadsheet.getSheetByName("社員一覧"); 6 7 SpreadsheetApp.setActiveSheet(subSheet); 8 9 //「組織情報紐付け用」シートのデータをクリア 10 var clearRange = objSheet.getRange("T2:Y5000"); 11 clearRange.clearContent(); 12 13 14 //「社員一覧」シートのデータ行数取得 15 var sublastRow = subSheet.getLastRow(); 16 17 18 var now = new Date(); 19 var nowY = new Date(now.getFullYear()); 20 var Y1 = new Date(now.setFullYear(now.getFullYear() - 1)); 21 var Y3 = new Date(now.setFullYear(now.getFullYear() - 2)); 22 var Y6 = new Date(now.setFullYear(now.getFullYear() - 3)); 23 var nowM = new Date(now.setMonth(3)); 24 var nowD = new Date(now.setDate(1)); 25 26 var nowYMD = new Date(nowY, nowM.getMonth(), nowD.getDate()); 27 nowYMD = Utilities.formatDate(nowYMD,"Asia/Tokyo","yyyy/MM/dd"); 28 29 var Y1before = new Date(Y1.getFullYear(),nowM.getMonth(), nowD.getDate()); 30 Y1before = Utilities.formatDate(Y1before,"Asia/Tokyo","yyyy/MM/dd"); 31 32 var Y3before = new Date(Y3.getFullYear(),nowM.getMonth(), nowD.getDate()); 33 Y3before = Utilities.formatDate(Y3before,"Asia/Tokyo","yyyy/MM/dd"); 34 35 var Y6before = new Date(Y6.getFullYear(),nowM.getMonth(), nowD.getDate()); 36 Y6before = Utilities.formatDate(Y6before,"Asia/Tokyo","yyyy/MM/dd"); 37 38 var values = []; 39 values = subSheet.getRange('A2:V2000').getValues(); 40 41 42 for(var k = 0; k <= sublastRow-2; k++){ 43 44 var ym_s = values[k][10]; 45 var ym = new Date(ym_s); 46 ym = Utilities.formatDate(ym,"Asia/Tokyo","yyyy/MM/dd"); 47 48 49 50 //社歴振り分け 51 if(Y1before < ym && ym >= nowYMD){ 52 53 values.splice(12, 1, "入社1年目"); 54 } 55 56 else if(Y3before < ym && ym <= Y1before){ 57 58 values.splice(12, 1, "入社2~3年目"); 59 } 60 61 else if (Y6before < ym && ym <= Y3before){ 62 63 values.splice(12, 1, "入社4~6年目"); 64 } 65 66 else{ 67 68 values.splice(12, 1, "入社7年目以降"); 69 } 70 71 72 //職位名称統合 73 if(values[k][9] == "取締役" || values[k][9] == "代表取締役" || values[k][9] == "監査役"){ 74 75 values.splice(9, 1, "役員"); 76 77 } 78 79 else if(values[k][9] == "Fellow"){ 80 81 values.splice(9, 1, "Vice President"); 82 83 } 84 85 else{ 86 continue; 87 } 88 89 var lastRow = values.length; 90 var lastColumn = values[0].length; 91 92 subSheet.getRange(2,1,lastRow,lastColumn).setValues(values); 93 94 } 95 96 //「組織情報紐付け用」シートのデータ行数取得 97 var objlastRow = objSheet.getLastRow(); 98 99 for(var i = 2; i <= objlastRow; i++){ 100 101 //VLOOKUPでデータ取得 102 div = '=IFERROR(VLOOKUP($A'+ i + ',社員一覧!$A$2:$V$2000,15,FALSE),"")'; 103 objSheet.getRange(i, 20).setFormula(div); 104 105 dept = '=IFERROR(VLOOKUP($A'+ i + ',社員一覧!$A$2:$V$2000,16,FALSE),"")'; 106 objSheet.getRange(i, 21).setFormula(dept); 107 108 Class = '=IFERROR(VLOOKUP($A'+ i + ',社員一覧!$A$2:$V$2000,10,FALSE),"")'; 109 objSheet.getRange(i, 22).setFormula(Class); 110 111 office = '=IFERROR(VLOOKUP($A'+ i + ',社員一覧!$A$2:$V$2000,19,FALSE),"")'; 112 objSheet.getRange(i, 23).setFormula(office); 113 114 EmpClassification = '=IFERROR(VLOOKUP($A'+ i + ',社員一覧!$A$2:$V$2000,9,FALSE),"")'; 115 objSheet.getRange(i, 24).setFormula(EmpClassification); 116 117 hireDate = '=IFERROR(VLOOKUP($A'+ i + ',社員一覧!$A$2:$V$2000,11,FALSE),"")'; 118 objSheet.getRange(i, 26).setFormula(hireDate); 119 120 term = '=IFERROR(VLOOKUP($A'+ i + ',社員一覧!$A$2:$V$2000,13,FALSE),"")'; 121 objSheet.getRange(i, 27).setFormula(term); 122 123 enSpeaker = '=IFERROR(VLOOKUP($A'+ i + ',社員一覧!$A$2:$V$2000,21,FALSE),"")'; 124 objSheet.getRange(i, 28).setFormula(enSpeaker); 125 126 Co = '=IFERROR(VLOOKUP($A'+ i + ',社員一覧!$A$2:$V$2000,22,FALSE),"")'; 127 objSheet.getRange(i, 29).setFormula(Co); 128 129 } 130} 131
試したこと
subSheet.getRange(2,1,lastRow,lastColumn).setValues(values);
をsubSheet.getRange(2,1,lastRow,lastColumn).setValues([values]);
に変更→変わりませんでした。
もともとは配列を使わずgetRange().setRange()にしていたのですが、
処理時間が長すぎて処理が完了せず…。
補足情報(FW/ツールのバージョンなど)
subSheet.getRange(2,1,lastRow,lastColumn).setValues(values);
を追加したことで上記エラーメッセージが表示されるようになりました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/12 23:55
2020/07/13 00:40 編集
2020/07/19 23:57