1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GASでシートをコピーする

Posted at

GASを使用してシートをコピーしたい時に以下のようなコードを書きました。

function copySheet(ss, targetSheetName, newSheetName) {
  var sheetTarget = ss.getSheetByName(targetSheetName);
  var sheetNew = sheetTarget.copyTo(ss);
  
  sheetNew.setName(newSheetName);
}

汎用性を持たせて上記のような形式にして、以下のように呼び出します。

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  copySheet(ss, "対象のシート名", "新しいシート名");

この場合、シートを丸々コピーするので、関数も全てコピーされるんですね。
関数をコピーじゃなくて値をコピーしたい場合があり、以下のようにしました。

function copySheetByValue(ss, targetSheetName, newSheetName, newSheetIndex, targetColumn) {
  var sheet = ss.getSheetByName(targetSheetName);
  
  // シート新規作成
  ss.insertSheet(newSheetName, newSheetIndex);
  var sheetNew = ss.getSheetByName(newSheetName);
  
  // コピーする内容を元シートから取得し、新シートに貼り付け
  var copyValues = sheet.getRange(1, 1, 1000, targetColumn).getValues();
  sheetNew.getRange(1, 1, copyValues.length, copyValues[0].length).setValues(copyValues);
}

呼び出し元は以下のような感じです。

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  copySheetByValue(ss, "対象のシート名", "新しいシート名", 1, 10);

コピーする時は、元シートから値を取得して新シートに貼り付けるということをやっています。

この場合、コピーする対象の範囲(行、列)を指定したり、値だけの貼り付けなので、書式もコピーしたい場合は別途対応だったり、もうちょっと良いやり方がある気がしています。

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?