以前こちらの記事でgetActiveメソッドを使い現在のスプレッドシートの範囲やシートをなどを取得する方法を説明しました。
[GAS] スプレッドシートで使用できるgetactiveメソッドをマスター
今回ご紹介するsetActiveメソッドでは取得ではなく、スプレッドシートの範囲を指定するメソッドです。
getActiveメソッドは現在範囲になっている箇所を取得したりシートを取得する事が可能になりますが、setActiveメソッドではシートを指定したり範囲を指定することが可能になります。
スプレッドシートのsetactiveメソッド
スプレッドシート内のスクリプトエディタで使用するとそのスプレッドシートのデータを指定できるメソッドです。
クラス:SpreadsheetApp
注意:初めてコードを実行する際にアクセス権限の許可を求められますが許可をしてください。アクセス権限についての詳細は以下の記事に詳しく載っています。
無料のGmailアカウントでGASに初回の実行許可を与える方法
setActiveRange(範囲)
スプレッドシートのセル範囲をアクティブな範囲として設定します。また指定した範囲の左上がアクティブセルとなります。
以下がサンプルコードです。
function setActiveRange(){ var range = SpreadsheetApp.getActiveSheet().getRange('C1:D4'); SpreadsheetApp.setActiveRange(range); }
getActiveSheetで現在開いているシートを選択しC1:D4の範囲を取得しています。そしてsetActiveSheetで取得した範囲をアクティブ範囲として設定ています。
スプレッドシートのスクリプトエディタで実行すると以下のようになります。
C1:D4が選択されその中で左上のC1のセルが選択されています。ちなみに範囲の記載方法は‘C1:D4’で囲う事で取得できます。
setActiveRangeList(範囲リスト)
複数の選択範囲を設定できます。複数の範囲を設定する場合は配列にして設定します。配列の最後に入っている範囲がアクティブ範囲となります。
その際setActiveRangeと同じように左上のセルがアクティブとなります。文字だけでは分かりづらいのでコードとサンプルをご覧ください。
コード(横スクロールできます)
function setActiveRangeList(){ var rangeList = SpreadsheetApp.getActiveSheet().getRangeList(['D4', 'B2:C4','E4','A4']); SpreadsheetApp.setActiveRangeList(rangeList); }
googleリファレンスのように2行目でgetRangesを使用してみたのですがエラーが出てしまったのでgetRangelistを使用して範囲を取得しています。
getRangelistについてはこちらの記事を参考にしてみてください。この際配列で複数取得できますので今回は
D4 B2:C4 E4 A4
の配列の順で取得し3行目で設定しています。結果が以下になります。選択した部分がアクティブ範囲になっていますね。そして最後に指定したA4セルがアクティブセルとして指定されています。
このようにアクティブ範囲を設定することによって視覚的に分かりやすくなりますのでこのセルを注目してくださいなどの注意喚起などにも使用できそうですね。
setActiveSheet(シート)
スプレッドシート内の指定のシートを設定します。他のスプレッドシートのシートを設定した場合は機能しません。
コード
2行目で現在開いているスプレッドシートのシート情報を取得しています。
getSheetsは配列で取得できるので[1]で2つ目を取得しています。そして3行目で2つ目のシートに移動させています。
function setActiveSheet(){ var getSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1]; SpreadsheetApp.setActiveSheet(getSheet); }
コードを実行しスプレッドシートをみると以下のように2つ目のシートがアクティブになっています。
起動した際にこの作業の時はこのシート、この人が作業する時はこのシートなどの設定がしたいときに便利なメソッドですね。
setActiveSheet(シート,セル範囲の復元(true,false) )
先ほどのsetActiveSheetの付加機能として一度設定したセル範囲をシートを変えても設定できる機能があります。
falseの場合は一つ前のsetActiveSheet(シート)と同じ働きをします。まずはコードを記載します。
コード(横にスクロールできます)
function setActiveSheet(){ var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); var firstSheet = spreadSheet.getSheets()[0];//1つ目のシートを取得 var secondSheet = spreadSheet.getSheets()[1];//2つ目のシートを取得 var range = SpreadsheetApp.setActiveSheet(firstSheet).getRange('C1:D4'); SpreadsheetApp.setActiveRange(range); spreadSheet.setActiveSheet(secondSheet); spreadSheet.setActiveSheet(firstSheet, true); }
6・7行目 C1:D4を1つ目のシートに範囲選択(setActiveRange)
9行目 2つ目のシートをアクティブ
10行目 1つ目のシートをアクティブにし6・7行目で行われていた操作を戻す(trueの場合)
このようなコードになっています。ですのでコードを実行すると以下のように1つ目のシートがアクティブになりC1:D4が選択されています。
(実際にはシート2に一度アクティブになっていますが見えないです)
ちなみに10行目の部分のtrueをfalseにすると復元機能がオフになるのでシート1がアクティブになりますが以下の画像のように選択範囲は何もされません。
ですので使い方としては最初のシートの範囲箇所を使って何か作業をする。
その後違うシートで作業を行いまた最初のシートの同じ範囲に戻りたい時などに使用する事ができます。
setActiveSpreadsheet(newActiveSpreadsheet)
アクティブにするスプレッドシートを設定します。ただこちらはGoogleリファレンス通り行ってもスプレッドシートIDで行っても起動できませんでした。
以下にコードを記載しておきます。
function setActiveSpreadSheet(){ var ss = SpreadsheetApp.openById("スプレッドシートのID"); SpreadsheetApp.setActiveSpreadsheet(ss); }
まとめ
今回はスプレッドシートの範囲やシートなどを設定するメソッドをご紹介しました。あらかじめ決まっているシートや範囲を設定することによって作業する人がどこを記入するべきかなど悩む必要がなくなるメソッドになるかと思います。
応用をすれば特定の作業時や作業者によって範囲やシートをスプレッドシートを開くだけで指定できるので作業効率化にもなりますね。
ここまでご覧いただきありがとうございました。
コメント