LoginSignup
10

More than 3 years have passed since last update.

【GAS】スプレッドシートから書式も含めて他のスプレッドシートへコピーする方法

Last updated at Posted at 2019-07-15

書いた経緯

同じスプレッドシート内であれば、簡単にコピーできるけど違うスプレッドシートにコピーする場合はひと手間加える必要があったため

同じスプレッドシート内でのコピー方法

まずは同じスプレッドシート内でコピーするスクリプトです。

function copyToOtherSht() {
  var ss = SpreadsheetApp.openById('スプレッドシートID');

  var getRange = ss.getSheetByName('シート1').getRange('A1:C3');
  var setCell = ss.getSheetByName('シート2').getRange('B4');

  copyRange.copyTo(setCell);
}

注意点としては、CopyToメソッドはその前にシートオブジェクトを置くか、Rangeオブジェクトを置くかで()で指定するオブジェクトが変わってきます。

Sheetオブジェクト.copyTo(Spreadsheetオブジェクト);
Rangeオブジェクト.copyTo(Rangeオブジェクト);

コピー先を違うスプレッドシートにしてみる

function copyToOtherSht() {
  var getsht = SpreadsheetApp.openById('スプレッドシートID(コピー元)').getSheetByName('シート1');
  var getRange = getsht.getSheetByName('シート1').getRange('A1:C3');

  var setCell =  SpreadsheetApp.openById('スプレッドシートID(コピー先)').getSheetByName('シート1').getRange('B4');

  getRange.copyTo(setCell); //ここでエラーになる
}

すると下記のエラーが出ていまします。
2019-07-15_15h44_33.jpg
エラー内容どおり、copyToメソッドでは異なるスプレッドシートへコピーはできないようです。

エラーを回避して違うスプレッドシートへコピーする方法

上記のエラーを回避するために下記の手順を踏みます。

  1. コピーしたいシートをコピー先のスプレッドシートに移動
  2. コピーした先のスプレッドシートでコピーしたいRangeを指定
  3. コピー先を指定してコピー実行
  4. 移動させたシートの削除
function copyToOtherSht() {
  var getSht = SpreadsheetApp.openById('スプレッドシートID(コピー元)').getSheetByName('シート1');

  //1. コピーしたいシートをコピー先のスプレッドシートに移動
  var activeSs = SpreadsheetApp.getActiveSpreadsheet();
  var copySht = getSht.copyTo(activeSs);

  //2. コピーした先のスプレッドシートでコピーしたいRangeを指定
  var getRange = copySht.getRange('A1:C3');

  //3. コピー先を指定してコピー実行
  var setCell = activeSs.getSheetByName('シート1').getRange('D2');
  getRange.copyTo(setCell);

  //4. 移動させたシートの削除
  activeSs.deleteSheet(copySht);
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10