質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

1589閲覧

Googleスプレッドシートの複数範囲を別のシートにコピペするコードのエラーについて

giogio1227

総合スコア2

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/06/18 06:46

編集2022/06/18 16:15

GoogleスプレッドシートのGASについてです。特定の範囲のセル(複数の範囲)を別のシートにコピーしたいのですが、エラーがでます。どこが間違っているのでしょうか!?

function myFunction2() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRangeList(['A2:B', 'E2:E', 'H2:H', 'K2:K']).activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('全体'), true);
spreadsheet.getRange('B3')
spreadsheet.getRangeList('ページ!'['A2:A', 'E2:E', 'H2:H', 'K2:K']).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};

ページという名前のシートから全体という名前のシートにコピペしたいです。

spreadsheet.getRangeList('ページ!'['A2:A', 'E2:E', 'H2:H', 'K2:K']).copyTo(spreadsheet.getActiveRange(),  の個所で、
Exception: Invalid argument: a1Notations というエラーがでます。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

giogio1227

2022/06/18 16:13

ありがとうございます!!!!ほぼできました。こちらですが、あとは隙間をつめて貼り付けをしたく、、現在ですと、データの間に隙間が空いてしまいます。。こちら隙間を詰めて貼り付けするにはどのようにすればいいでしょうか!??
退会済みユーザー

退会済みユーザー

2022/06/19 01:17

追記しました
giogio1227

2022/06/19 10:12

qnoirさん、ありがとうございます!!!こちら試してみたのですが、上手く動きません。。。具体的には、もとのページというシートからいくつかのデータが消えてしまい、貼り付けがうまくされません。。
退会済みユーザー

退会済みユーザー

2022/06/21 11:51

回答欄の2番目のコードを修正しました。 (コピー元とコピー先のシート名が逆になっていたのを修正しました。凡ミスで申し訳ございません。)
guest

回答1

0

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}

投稿2022/06/18 07:42

編集2022/06/21 11:50
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問