Exception: Invalid argument: a1Notations というエラー
getRangeList('ページ!'['A2:A', 'E2:E', 'H2:H', 'K2:K']) という指定方法はできません。
これだと「ページ!」という文字列に対して「'A2:A', 'E2:E', 'H2:H', 'K2:K'」というプロパティを指定しているので、undefined と評価され、引数として無効(invalid)になります。
そもそもgetRangeList(['ページ!A2:A', 'ページ!E2:E', 'ページ!H2:H', 'ページ!K2:K']);
という指定方法もできません。
(「Exception: Specified range must be part of the sheet.」というエラーになります。)
たとえば、ページという名前のシートの['A2:B', 'E2:E', 'H2:H', 'K2:K'] の範囲を、全体シートの同じ位置にコピーしたい場合は
下記のようにします。
js
1function myFunction2() {
2 const sourceSheet = SpreadsheetApp.getActive().getSheetByName('ページ');
3 const sourceRangeList = sourceSheet.getRangeList(['A2:B', 'E2:E', 'H2:H', 'K2:K']);
4 const destinationSheet = SpreadsheetApp.getActive().getSheetByName('全体');
5
6 sourceRangeList.getRanges().forEach(range => {
7 range.copyTo(destinationSheet.getRange(range.getA1Notation()), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
8 });
9}
コピー元データの各列を詰めてコピー先に貼り付けたい場合
js
1function myFunction3() {
2 const sourceSheet = SpreadsheetApp.getActive().getSheetByName('ページ');
3 const sourceRangeList= sourceSheet.getRangeList(['A2:B', 'E2:E', 'H2:H', 'K2:K']);
4 const destinationSheet = SpreadsheetApp.getActive().getSheetByName('全体');
5 let startColumn = 1;
6 const startRow = 2;
7 sourceRangeList.getRanges().forEach(range => {
8 const destinationRange = destinationSheet.getRange(startRow, startColumn, range.getNumRows(), range.getNumColumns());
9 range.copyTo(destinationRange, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
10 startColumn += range.getNumColumns();
11 });
12}