GASでスプレッドシートのシートの順番を移動・変更する方法(moveActiveSheet)
スプレッドシートでシート枚数が増えると探すのが手間になります。
そこで、Google Apps Script(GAS)を使ってスプレッドシートのシートの順番を並び替える方法を解説します。
スプレッドシートは使うほどシート枚数が増加
Googleの表計算ソフトであるスプレッドシートはブラウザで利用できて便利なツールです。
その便利さがゆえに、使い込むうちにどんどんシートの枚数が増えていきます。
その結果、目当てのシートを探すのに時間がかかるようになります。
シート枚数が増えると、ワンクリックでシートを切り替えることができなくなります。
そのため、利用頻度の高いシートはできるだけ先頭や前方に配置するようになります。
シートの位置移動もGASで可能
スプレッドシートの操作ではたびたび発生するスプレッドシート内でのシートの位置変更は、Google Apps Script(GAS)でも実行できます。
スプレッドシートでシートを移動させるには「moveActiveSheetメソッド」を使用します。
Spreadsheet.moveActiveSheet(n);
スプレッドシートでアクティブなシートを引数にしたn番目に移動させます。
moveActiveSheetメソッドの引数が1なら先頭にアクティブなシートが移動します。
moveActiveSheetではシートのアクティブ化必須
Google Apps ScriptでmoveActiveSheetを使う場合、移動対象となるのはアクティブなシートです。
スプレッドシートでよくあるメソッドのようにシートでメソッドが実行できず、引数に指定することもできません。
そのため、事前に移動したいシートをアクティブにするgeActive()メソッドを実行する必要があります。
複数のシートを移動させるようなGASスクリプトを書く場合は、以下のような処理を実装します。
- 移動したいシートをアクティブ化する
- moveActiveSheetで移動する
- 移動したいシート分1と2を繰り返す
新規作成シートを先頭に移動するGASサンプルコード
Google Apps Scriptでスプレッドシートのシートを移動させるサンプルコードを紹介します。
1つ目のサンプルコードは、移動対象のシートは1つのケースです。
スプレッドシートにはシート1、シート2、シート3の順番で並んでいます。
GASスクリプトで新たに追加したシートを先頭に移動させる処理を記述します。
function moveSheet() {
//コンテナバインドで紐付いたスプレッドシートを読み込み
let mySheet = SpreadsheetApp.getActiveSpreadsheet();
//スプレッドシートに新しいシートを追加挿入し、アクティブ化
let newSheet = mySheet.insertSheet().activate();
//新しく追加したシートを先頭に移動
mySheet.moveActiveSheet(1);
}
GASのサンプルコードを実行すると、より番号が大きい後に作成したシートが先頭に来ています。
GASスクリプトの処理では、シートが末尾に追加挿入されたあと、moveActiveSheetで先頭に移動しています。
シートの順番を逆順に並び替えるGASサンプルコード
続いて2つ目にシートの順番を逆順に並び替えるGoogle Apps Script(GAS)のサンプルコードも用意しました。
1つ前のサンプルコードで実行した結果、スプレッドシートのシートはシート4、シート1、シート2、シート3の順番で並んでいます。
このシートの順番を逆転させて、逆順に並び替えるGASスクリプトの処理を実装しています。
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ループのあとに先頭への位置変更を行ったシートほど前に来るようになり、その結果、シートを逆順に並び替えることができます。
サンプルコードを実行した結果、先程のスプレッドシートとシートの並びが先頭と末尾が逆になっていることが確認できました。
moveActiveSheetメソッドの注意点
Google Apps Script(GAS)のmoveActiveSheetメソッドでスプレッドシートのシートの位置を移動する際には2つの注意点があります。
- 移動したいシートはactivateする
- 引数に指定できるのは(存在するシート数+1)まで
1つ目はmoveActiveSheetメソッドの使い方の紹介でも伝えた通り、このメソッドはスプレッドシートのオブジェクトで実行します。
実行するスプレッドシートオブジェクトで、アクティブなシートの位置を変更することができるため、移動したいシートのactivateが必須です。
2つ目はmoveActiveSheetメソッドの引数で指定できる数字は、「シート枚数+1」までです。
例えば、5枚のシートがあるスプレッドシートでmoveActiveSheetメソッドで指定できる引数の数字は1~6までとなります。
それ以上の数字を引数に指定すると、「Invalid argument」のメッセージが表示され、実行エラーになります。
そのため、シートのアクティブ化を忘れずに、引数に指定できる数字か確認しましょう。
まとめ・終わりに
今回、Google Apps Script(GAS)でスプレッドシートにあるシートの位置を変更、順番を並び替える方法を紹介しました。
GASに用意されたmoveActiveSheetメソッドで引数に指定した順番の位置にシートを移動することができます。
ただ、シートを引数に指定できず、位置を変更できるのはアクティブなシートのみ対象なので、シートのactivateメソッド実行が必須です。
シートが増えると前の方にあるシートの方が利用しやすいので、moveActiveSheetメソッドを活用し、シートの移動も自動化しましょう。
ディスカッション
コメント一覧
まだ、コメントがありません