LoginSignup
2
6

More than 1 year has passed since last update.

003-Googleスプレッドシートに用意したテンプレートシートをコピーして名前変えて「左から2枚目に移動」したい

Last updated at Posted at 2017-08-13

結論

moveActiveSheet(Integer)で移動先の位置を指定しましょう。

sample-code1.gs

function copySheet(){
  //スプレッドシートを指定
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  //  コピー元シートを指定
  var source = ss.getSheetByName("テンプレート");

  //  シートをコピー
  var newSheet = source.copyTo(ss);

  // シート名を「hoge」に変更
  newSheet = newSheet.setName("hoge");

  //作成シートにカーソルをフォーカス
  ss.setActiveSheet(newSheet);

  //カーソルフォーカスされた作成シートを左から2番目に移動
  ss.moveActiveSheet(2);

}

解説

「シートの作成を自動化できたはいいものの、ピンポイントに設置したい!なのにどうすればいいかMethodが見つからない」というお問い合わせをいただきました。

「シートを増やすんだから、使うClassはSheetだよね」という読みは大正解。
だけどもシート移動はSpreadsheet ClassのMethodを使うことになります。

「Classを探すなら、やりたいことの補語1に該当するものを探せ」。

なおmoveActiveSheetは
+ 今、カーソルが置いてある(Activeな)シートを
+ 指定された位置に移動する

というMethodのため、「動かしたいシート(=たった今、スクリプトによって作成したシート)」を明示してあげる必要があります。
上記サンプルスクリプトではこれをsetActiveSheet(sheet)で実現しました2

蛇足

今回のお題であればコピーしたシートの名前は「hoge」ではなく日付にしてあげた方が良いでしょう。
これも諸説ありますが私が書くとこんな感じ(というのをsample-code2.gsに載せておきます)。

動作確認スクリプト

sample-code2.gs

  //スプレッドシートを指定
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  //  スプレッドシート内にある「テンプレート」シートをコピーし、
  //  「yyyy-MM-dd HH:mm」形式のシート名に変更したものを
  //  シートの一番右側に作成
  var newSheet = ss.getSheetByName("テンプレート").copyTo(ss).setName(Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy-MM-dd HH:mm"));

  //作成シートにカーソルをフォーカス
  ss.setActiveSheet(newSheet);

  //カーソルフォーカスされた作成シートを左から2番目に移動
  ss.moveActiveSheet(2);
}

スクリプト補足1

sample-code1.gsの2〜4行目をまとめました(変数sourceの使い道が、変数newSheetの操作にしか使わなかったので)。

スクリプト補足2

setActiveSheetの返り値はSheet Classなので、うっかりsetCativeSheet(newSheet).moveActiveSheet(2)とかやると実行時に怒られます。
moveActiveSheetもSpreadsheet Classだからね!

つぶやき1

「”〜に”の部分って目的語だっけ?補語だっけ?」と悩んで10分くらいGoogle検索に頼ってしまったのは内緒の話。


  1. 「テンプレートシートを”スプレッドシートに”コピーする」なので、ダブルクォートの部分は「補語」、だと思う…あれ? 

  2. 例によってやり方は色々あると思います。 

2
6
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
2
6