GASでスプレッドシートのシートの順番を移動・変更する方法(moveActiveSheet)

スプレッドシートでシート枚数が増えると探すのが手間になります。

そこで、Google Apps Script(GAS)を使ってスプレッドシートのシートの順番を並び替える方法を解説します。

スプレッドシートは使うほどシート枚数が増加

Googleの表計算ソフトであるスプレッドシートはブラウザで利用できて便利なツールです。

その便利さがゆえに、使い込むうちにどんどんシートの枚数が増えていきます。

Googleのスプレッドシートは、使用しているうちにシート数が増え、シート表示を切り替えるのに時間がかかるように

その結果、目当てのシートを探すのに時間がかかるようになります。

シート枚数が増えると、ワンクリックでシートを切り替えることができなくなります。

そのため、利用頻度の高いシートはできるだけ先頭や前方に配置するようになります。

シートの位置移動もGASで可能

スプレッドシートの操作ではたびたび発生するスプレッドシート内でのシートの位置変更は、Google Apps Script(GAS)でも実行できます。

スプレッドシートでシートを移動させるには「moveActiveSheetメソッド」を使用します。

Spreadsheet.moveActiveSheet(n);

スプレッドシートでアクティブなシートを引数にしたn番目に移動させます。

moveActiveSheetメソッドの引数が1なら先頭にアクティブなシートが移動します。

moveActiveSheetではシートのアクティブ化必須

Google Apps ScriptでmoveActiveSheetを使う場合、移動対象となるのはアクティブなシートです。

スプレッドシートでよくあるメソッドのようにシートでメソッドが実行できず、引数に指定することもできません。

そのため、事前に移動したいシートをアクティブにするgeActive()メソッドを実行する必要があります。

複数のシートを移動させるようなGASスクリプトを書く場合は、以下のような処理を実装します。

  1. 移動したいシートをアクティブ化する
  2. moveActiveSheetで移動する
  3. 移動したいシート分1と2を繰り返す

新規作成シートを先頭に移動するGASサンプルコード

Google Apps Scriptでスプレッドシートのシートを移動させるサンプルコードを紹介します。

1つ目のサンプルコードは、移動対象のシートは1つのケースです。

Google Apps Scriptで新規作成したシートを先頭に移動する

スプレッドシートにはシート1、シート2、シート3の順番で並んでいます。

GASスクリプトで新たに追加したシートを先頭に移動させる処理を記述します。

スプレッドシートに新規で追加挿入したシートの位置を末尾から先頭に入れ替えるGoogle Apps Script(GAS)のスクリプト

function moveSheet() {
//コンテナバインドで紐付いたスプレッドシートを読み込み
let mySheet = SpreadsheetApp.getActiveSpreadsheet();
//スプレッドシートに新しいシートを追加挿入し、アクティブ化
let newSheet = mySheet.insertSheet().activate();
//新しく追加したシートを先頭に移動
mySheet.moveActiveSheet(1);
}

GASのサンプルコードを実行すると、より番号が大きい後に作成したシートが先頭に来ています。

Google Apps Scriptのシート位置を変更するスクリプトを実行した結果

GASスクリプトの処理では、シートが末尾に追加挿入されたあと、moveActiveSheetで先頭に移動しています。

シートの順番を逆順に並び替えるGASサンプルコード

続いて2つ目にシートの順番を逆順に並び替えるGoogle Apps Script(GAS)のサンプルコードも用意しました。

1つ前のサンプルコードで実行した結果、スプレッドシートのシートはシート4、シート1、シート2、シート3の順番で並んでいます。

このシートの順番を逆転させて、逆順に並び替えるGASスクリプトの処理を実装しています。

Google Apps Script(GAS)でスプレッドシートのシート位置を移動・変更する方法~moveActiveSheetメソッドでシートを並べ替え

function moveSheetReverse() {
//コンテナバインドで紐付いたスプレッドシートを読み込み
let mySheet = SpreadsheetApp.getActiveSpreadsheet();
//コンテナバインドで紐付いたスプレッドシートのすべてのシートを取得
let sheetList = mySheet.getSheets();
//forループで先頭のシートに並べ替えの処理を実行
//後に実行するほど順番が前になるため、シートを逆順に並び替え
for(let i=0;i<sheetList.length;i++){
//sheetListのシートを順番にアクティブ化
sheetList[i].activate();
//アクティブ化したシートを先頭に位置を変更
mySheet.moveActiveSheet(1);
}
}

getSheetsメソッドでスプレッドシートにあるシートを一覧で取得し、forループで繰り返し処理を行います。

getSheetsではスプレッドシートの先頭シートから取得する仕様になっています。

forループのあとに先頭への位置変更を行ったシートほど前に来るようになり、その結果、シートを逆順に並び替えることができます。

スプレッドシートのシートを逆順に並び替えるGoogle Apps Script(GAS)のサンプルコード

サンプルコードを実行した結果、先程のスプレッドシートとシートの並びが先頭と末尾が逆になっていることが確認できました。

moveActiveSheetメソッドの注意点

Google Apps Script(GAS)のmoveActiveSheetメソッドでスプレッドシートのシートの位置を移動する際には2つの注意点があります。

  1. 移動したいシートはactivateする
  2. 引数に指定できるのは(存在するシート数+1)まで

1つ目はmoveActiveSheetメソッドの使い方の紹介でも伝えた通り、このメソッドはスプレッドシートのオブジェクトで実行します。

実行するスプレッドシートオブジェクトで、アクティブなシートの位置を変更することができるため、移動したいシートのactivateが必須です。

2つ目はmoveActiveSheetメソッドの引数で指定できる数字は、「シート枚数+1」までです。

例えば、5枚のシートがあるスプレッドシートでmoveActiveSheetメソッドで指定できる引数の数字は1~6までとなります。

それ以上の数字を引数に指定すると、「Invalid argument」のメッセージが表示され、実行エラーになります。

そのため、シートのアクティブ化を忘れずに、引数に指定できる数字か確認しましょう。

まとめ・終わりに

今回、Google Apps Script(GAS)でスプレッドシートにあるシートの位置を変更、順番を並び替える方法を紹介しました。

GASに用意されたmoveActiveSheetメソッドで引数に指定した順番の位置にシートを移動することができます。

ただ、シートを引数に指定できず、位置を変更できるのはアクティブなシートのみ対象なので、シートのactivateメソッド実行が必須です。

シートが増えると前の方にあるシートの方が利用しやすいので、moveActiveSheetメソッドを活用し、シートの移動も自動化しましょう。