前提
(10/27 20:14追記)
投稿しましたが、エラーは自己解決できました。
下記<2><3>部分のみアドバイスをいただけます
でしょうか?
次の2つのスプレッドシートファイルがあります。
①個票
②全体票
実現したいこと
GASで①個票のB4:E9の内容を全体票に転記させたいです。
個票のデータはgetRange().getValues()で一度にまとめて
二次元配列として取得。
発生している問題・エラーメッセージ
ログで見ると二次元配列でデータは取得できていそうです。
が、下のエラーがたってしまいました。
何か基本的なことを見落としている気がするのですが、
コードのどこがマズイのかが分かりません。
<1>解消するためのアドバイスをいただけないでしょうか?
<2>次のどちらがおすすめでしょうか?
setValuesで配列内の列単位で転記していくコードで
記載しましたが、報告1、(入力日、入力者、推移) 報告2、、
と行単位で転記していく方法も可能かと思います。
どちらのアプローチがよいのでしょうか?
その理由も教えて欲しいです。
<3>上記<2>で行単位で転記の場合のコード記載
let rep1 = fromRange[r]; 、、、等
行インデックスのみ指定する方法に変更する形でしょうか?
この場合、転記先ファイルへのデータ転記部分のコードのgetRangeの
(行,列,行分,列分)の4つ目の引数? は3に変更でしょうか?
Exception: The parameters ((class)) don't match the method signature for SpreadsheetApp.Range.setValues. myFunction @ 個票⇒全体票.gs:49
該当のソースコード
以下、コード全文記載します。
GAS
1(自己解決コード) ------------------------------------------------------------ 2function myFunction(indvToall) { 3 4 //ALLファイルURL 5 // https://docs.google.com/spreadsheets/d/1NbSg5b2aW3U1-RaOPHsh6ZUTFp5WAxeKQ1WpL3oF5sQ/edit#gid=0 6 7 //ALLファイルID 8 //1NbSg5b2aW3U1-RaOPHsh6ZUTFp5WAxeKQ1WpL3oF5sQ 9 10 const fromss = SpreadsheetApp.getActiveSpreadsheet(); 11 const toss = SpreadsheetApp.openById("1NbSg5b2aW3U1-RaOPHsh6ZUTFp5WAxeKQ1WpL3oF5sQ"); 12 const fromSheet = fromss.getSheetByName('入力シート'); 13 const toSheet = toss.getSheetByName('全体進捗'); 14 15 //▼個票ファイルのファイルID(スプレッドシートID)の取得 16 fromId = fromss.getId(); 17 fromURL = fromss.getUrl(); 18 console.log('fromId ' + fromId); 19 console.log('fromURL ' + fromURL); 20 21 //▼転記先ファイル(ALL)の転記行(targetRow)の取得 22 //個票のセルF10から取得 23 const targetRow = fromSheet.getRange(10, 6, 1, 1).getValue(); // 6が正解 24 console.log('targetRow ' + targetRow); 25 26 //▼転記先ファイル(ALL) B列に転記元ファイル(個票)URLを転記 27 fromUrl = toSheet.getRange(targetRow, 2, 1, 1).setValue(fromURL); 28 console.log('fromUrl ' + fromUrl); 29 30 //▼転記先ファイル(ALL) U列に転記元ファイル(個票)IDを転記 31 fromUrl = toSheet.getRange(targetRow, 21, 1, 1).setValue(fromId); 32 console.log('fromId ' + fromId); 33 34 fromRange = fromSheet.getRange(4, 2, 6, 3).getValues(); 35 console.log('fromRange ' + fromRange); 36 37 //▼個票ファィルのデータ取得 38 //B4~D9までを二次元配列(fromRange)で取得 39 //二次元配列(fromRange) 40 for (let r = 0; r <= 5; r++) { 41 let date = fromRange[r][0]; //入力日 42 let name = fromRange[r][1]; //入力者 43 let cond = fromRange[r][2]; //概要 44 console.log('date ' + date); 45 console.log('name ' + name); 46 console.log('cond ' + cond); 47 48 //▼転記先ファイル(ALL)へのデータ転記 49 //状況報告1欄への転記 50 //getRange(行,列,行分,列分) 51 const setdate = toSheet.getRange(targetRow, 3 + r *3, 1, 1).setValue(date); 52 const setname = toSheet.getRange(targetRow, 4 + r *3, 1, 1).setValue(name); 53 const setcond = toSheet.getRange(targetRow, 5 + r *3, 1, 1).setValue(cond); 54 55 //▼個票ファィルの「自動処理日時」欄(E列)にタイムスタンプを追記 56 const timeStamp = new Date(); 57 console.log(timeStamp); 58 fromSheet.getRange(4 + r, 5, 1, 1).setValue(timeStamp); 59 60 } 61} 62 63(誤コード) -------------------------------------------------------------------- 64function myFunction(indvToall) { 65 66 //ALLファイルURL 67 // https://docs.google.com/spreadsheets/d/1NbSg5b2aW3U1-RaOPHsh6ZUTFp5WAxeKQ1WpL3oF5sQ/edit#gid=0 68 69 //ALLファイルID 70 //1NbSg5b2aW3U1-RaOPHsh6ZUTFp5WAxeKQ1WpL3oF5sQ 71 72 const fromss = SpreadsheetApp.getActiveSpreadsheet(); 73 const toss = SpreadsheetApp.openById("1NbSg5b2aW3U1-RaOPHsh6ZUTFp5WAxeKQ1WpL3oF5sQ"); 74 const fromSheet = fromss.getSheetByName('入力シート'); 75 const toSheet = toss.getSheetByName('全体進捗'); 76 77 //▼個票ファイルのファイルID(スプレッドシートID)の取得 78 fromId = fromss.getId(); 79 fromURL = fromss.getUrl(); 80 console.log('fromId ' + fromId); 81 console.log('fromURL ' + fromURL); 82 83 //▼転記先ファイル(ALL)の転記行(targetRow)の取得 84 //個票のセルF10から取得 85 const targetRow = fromSheet.getRange(10, 6, 1, 1).getValue(); // 6が正解 86 console.log('targetRow ' + targetRow); 87 88 //▼転記先ファイル(ALL) B列に転記元ファイル(個票)URLを転記 89 fromUrl = toSheet.getRange(targetRow, 2, 1, 1).setValue(fromURL); 90 console.log('fromUrl ' + fromUrl); 91 92 //▼転記先ファイル(ALL) U列に転記元ファイル(個票)IDを転記 93 fromUrl = toSheet.getRange(targetRow, 21, 1, 1).setValue(fromId); 94 console.log('fromId ' + fromId); 95 96 //▼個票ファィルのデータ取得 97 //B4~D9までを二次元配列(fromRange)で取得 98 //二次元配列(fromRange) 99 for (let r = 0; r <= 6; r++) { 100 fromRange = fromSheet.getRange(4, 2, 6, 3).getValues(); 101 console.log('fromRange ' + fromRange); 102 let date = fromRange[r][0]; //入力日 103 let name = fromRange[r][1]; //入力者 104 let cond = fromRange[r][2]; //概要 105 console.log('date ' + date); 106 console.log('name ' + name); 107 console.log('cond ' + cond); 108 109 //▼転記先ファイル(ALL)へのデータ転記 110 //状況報告1欄への転記 111 //getRange(行,列,行分,列分) 112 const setdate = toSheet.getRange(targetRow, 3 + r *3, 1, 1).setValues(date); 113 const setname = toSheet.getRange(targetRow, 4 + r *3, 1, 1).setValues(name); 114 const setcond = toSheet.getRange(targetRow, 5 + r *3, 1, 1).setValues(cond); 115 116 //▼個票ファィルの「自動処理日時」欄(E列)にタイムスタンプを追記 117 const timeStamp = new Date(); 118 console.log(timeStamp); 119 fromSheet.getRange(4 + r, 5, 1, 1).setValue(timeStamp); 120 121 } 122} 123 124
試したこと
補足情報(FW/ツールのバージョンなど)
お忙しいところ申し訳ありませんが、
非エンジニアビギナーでも理解できるレベルのアドバイス、解説を
いただけると助かります。
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/10/31 10:21