【GAS】スプレッドシートで使用できるgetactiveメソッドをマスター

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

スプレッドシートでのデータ管理をしていく中で、作業者が特定のスプレッドシート内で作業を行った時だけ起動をするスクリプトや特定のセルに入力が行われた際だけ起動するスクリプトを設定したい方もいるかと思います。

今回は今作業者が開いている、入力している範囲がどこなのかを取得できるgetactiveメソッドをご紹介します。

スプレッドシートのgetactiveメソッド

スプレッドシート内のスクリプトエディタで使用すると現在起動しているスプレッドシートやセルの範囲などを取得できるメソッドです。

クラス:SpreadsheetApp

注意:初めてコードを実行する際にアクセス権限の許可を求められますが許可をしてください。アクセス権限についての詳細は以下の記事に詳しく載っています。

無料アカウントでGoogleサービスへのスコープを設定する方法

getActive()

スプレッドシートのデータをオブジェクト型で取得します。該当するスプレッドシートがない場合(スプレッドシート以外のスクリプト)nullを返します。

スプレッドシートを開きスクリプトエディタにこのメソッドを使用することによって使用できます。

以下がスクリプトです。getActiveメソッドだけでは活用できないので今回は3行目にgetactiveのみの結果、4行目にgetUrlを使用し対象のスプレッドシートのURLを取得しています。

function getActive() {
  var NewSs = SpreadsheetApp.getActive();
  Logger.log(NewSs);
  Logger.log(NewSs.getUrl());
}

実行結果をログで表示させると以下の結果になります。getActiveだけですとスプレッドシートのオブジェクトが返るだけなのでSpreadsheetとでていますね。URLを表示してみるとスクリプトを作成したスプレッドシートが起動することが確認できます。

getActiveRange()

選択した範囲のデータをオブジェクトで取得します。選択していない場合はnullが返ります。また複数の範囲を選択した場合は最後に選択した範囲のデータが取得されます。ではサンプルでみていきましょう。

今回のサンプルのスプレッドシートです。以下のようなデータを入れてます。そして選択範囲はA1にしています。

2020-08-26 11.56.57

スクリプト内容です。確認のため2行目にgetActiveRangeだけでログを出力させています。3行目は選択した範囲の値を取得するスクリプトです。

function getActiveRange() {
  var NewRange = SpreadsheetApp.getActiveRange();
  Logger.log(NewRange);
  Logger.log(NewRange.getValue());
}

結果は以下の画像のようになります。2行目のログのgetActiveRangeはオブジェクト型で返すのでRangeとだけでていますね。そしてA1に選択範囲があるのでA1の値である「A1」が取得されています。

2020-08-26 12.06.36

では複数範囲を選択してみるとどうなるでしょうか?A1→B5→C7→D14の順でクリックし選択範囲を指定しました。

2020-08-26 12.13.32

先ほどと同じスクリプトを実行しログを確認してみると以下の画像のように取得ができました。

2020-08-26 12.51.25

最後にクリックしたD14の値である「D14」が取得されました。このように複数のデータを選択範囲しても全てのデータを取得することはできないので注意してください。

このメソッドはセルを選択した際に入力された値や位置を1つだけ取得する場合に使用することを推奨します。では複数の範囲のデータを取得する際はどうしたらいいのかについては次のgetActiveRangeListで説明します。

getActiveRangeList()

このメソッドでは複数の選択範囲を配列形式で取得することができます。選択範囲が1つの場合はgetActiveRangeメソッドと同じ結果がでます。ここではA4からD12まで選択したスプレッドシートでスクリプトを実行してみます。

2020-08-26 13.53.25

スクリプトは以下のようになっています。

function getActiveRangeList() {
  var RangeList = SpreadsheetApp.getActiveRangeList();
  var List = RangeList.getRanges();
  Logger.log(List[0].getValues());
}

流れとしては

2行目: getActiveRangeListで現在アクティブなリストを取得

3行目: getRangesでリストの範囲を配列で取得(配列で取得される事がポイントです。)

4行目: ログでリストの最初の配列List[0]に入っているデータを取得

となります。

そしてスクリプトを実行した結果は以下のようになります。配列で取得されていることが分かりますね。配列の中身としては行ごとの配列の中に列データが順番に入っている形となります。

ですので今回の例で言えば3行目の1列目「A6」の値を取得したい場合配列では

[2][0]

と指定する事で「A6」を取得することが可能です。

2020-08-26 14.16.06

getActiveSheet()

現在開いているスプレッドシートのシートデータをオブジェクト型で取得します。今回は以下の画像のようにスプレッドシートは赤文字で囲ったシート3を開いています。

2020-08-26 14.23.05

ここではgetNameを使用してシート名を取得するスクリプトを記載します。

//テストという名前をつけてスプレッドシートを新規作成するスクリプト

function getActiveSheet() {
  SpreadsheetApp.getActiveSheet().getName()
}

このスクリプトを実行すると結果はシート3となります。このメソッドを使用することによってスプレッドシートを起動する際に指定したシートを開くといった事が可能になります。

2020-08-26 14.33.06

getActiveSpreadsheet()

現在開いているスプレッドシートの情報をオブジェクト型で返します。対象のスプレッドシートがない場合はnullでデータが返ってきます。

このメソッドは最初に紹介したgetActiveメソッドと同じ結果がでますのでスクリプトだけ載せておきます。getActiveメソッドを使用せずこちらのメソッドを使用することによってスクリプトをみた際に分かりやすくなるという面があります。

function getActiveSpreadSheet() {
   Logger.log(SpreadsheetApp.getActiveSpreadsheet().getUrl());
}

 まとめ

今回はスプレッドシートを起動している際に現在表示している範囲がどこなのかを判別することができるgetActiveメソッドをご紹介しました。

このメソッドを使用することによって現在起動しているスプレッドシートの選択範囲のデータを取得できたり、シート情報を取得できますので、トリガーなどと併用することによって例えば、この選択範囲を選んだりデータを入力した際にはこのスクリプトを起動させようだとか、あの作業者がこのスプレッドシートを開いた際にはシート3を起動させよう、などの応用ができるかと思います。

この他にもスプレッドシートのスクリプトで起動をすることによってスプレッドシートIDやURLなどを取得することなくスクリプトを連続して実行できる点も便利ですのでぜひ使ってみてください。

ここまでご覧いただきありがとうございました。

SNSでもご購読できます。

コメントを残す

*