Google Apps Script (GAS) でスプレッドシートのシートやセル範囲等を取得する方法や、指定したシートやセル範囲等をアクティブにする方法を説明します。
SpreadSheetAppクラスのメソッドを利用した手順について説明します。
Google Apps Scriptの基本的な使い方については下記をご覧ください。
GASによるスプレッドシート操作の概要
GASでスプレッドシートを操作するための「SpreadSheetサービス」は、主に下記のクラスで構成されています。
クラス | 説明 |
---|---|
SpreadSheetApp | SpreadSheetサービスの親クラス |
Spreadsheet | スプレッドシートを操作するクラス |
Sheet | シートを操作するクラス |
Range | セル範囲を操作するクラス |
それぞれ下記のような位置付けになります。
「SpreadSheetApp」→「SpreadSheet」→「Sheet」→「Range」という順の階層構造になっています。操作対象に応じて、下の階層にたどってオブジェクトを取得して利用します。
このページでは、上記の中のSpreadSheetAppクラスの下記のメソッドについて説明します。
メソッド | 戻り値 | 説明 |
---|---|---|
getActiveSheet() | Sheet | アクティブなシートを取得する |
getActiveRange() | Range | アクティブなセル範囲を取得する |
getActiveRangeList() | RangeList | アクティブなすべてのセル範囲を取得する |
getCurrentCell() | Range | 現在のセルを取得する |
setActiveSpreadsheet(newActiveSpreadsheet) | void | スプレッドシートをアクティブにする |
setActiveSheet(sheet) | Sheet | シートをアクティブにする |
setActiveRange(range) | Range | セル範囲をアクティブにする |
setActiveRangeList(rangeList) | RangeList | 複数のセル範囲をアクティブにする |
setCurrentCell(cell) | Range | セルをアクティブにする |
アクティブな各種コンテンツを取得する
アクティブな(選択された)シートやセル範囲などを取得するメソッドを説明します。
アクティブなシートを取得する:getActiveSheet()
アクティブな(選択された)シートを取得する方法です。この方法は、コンテナバインドスクリプトである必要があります。
スプレッドシートのコンテナバインドスクリプトで下記のように実行します。
1 2 3 4 |
function myFunction() { const testSheet = SpreadsheetApp.getActiveSheet(); console.log(testSheet.getName()); } |
下記の実行結果になります。正常にシート名が出力されます。
「シート1」というシートをアクティブにしていた場合の例です。
1 |
シート1 |
なお、スタンドアロンスクリプトで同じコードを実行すると下記の実行結果になります。スプレッドシートファイルと紐づいておらず、testSheetがnullになるためです。
1 |
TypeError: Cannot read properties of null (reading 'getName') |
アクティブなセル範囲を取得する:getActiveRange()
アクティブな(選択された)セル範囲を取得する方法です。この方法は、コンテナバインドスクリプトである必要があります。
スプレッドシートのコンテナバインドスクリプトで下記のように実行します。
getA1Notation()は、セルの位置を表示するメソッドです。
1 2 3 4 |
function myFunction() { const testRange = SpreadsheetApp.getActiveRange(); console.log(testRange.getA1Notation()); } |
下記の実行結果になります。正常にセルの位置が出力されます。
セル「F2」をアクティブにしていた場合の例です。
1 |
F2 |
次に、複数のセル範囲を選択していた場合の例を見てみます。
複数のセル範囲を選択している場合は、最後に選択したセル範囲を取得します。
下記のように「B2:B4」→「C6:D7」→「F9:G11」の順に複数選択していたとします。
下記の実行結果になります。
1 |
F9:G11 |
次に、下記のように「F9:G11」→「C6:D7」→「B2:B4」の順に複数選択していたとします。選択しているセルはさきほどと同じです。
今度は、下記の実行結果になります。
1 |
B2:B4 |
このように、最後に選択したセル範囲を取得します。
最後に選択したセル範囲は、枠線が太くなっていますし、左上の表示でもわかります。
なお、スタンドアロンスクリプトで同じコードを実行すると下記の実行結果になります。スプレッドシートファイルと紐づいておらず、testRangeがnullになるためです。
1 |
TypeError: Cannot read properties of null (reading 'getA1Notation') |
アクティブな全てのセル範囲を取得する:getActiveRangeList()
アクティブな(選択された)セル範囲を全て取得する方法です。この方法は、コンテナバインドスクリプトである必要があります。
下記の状態を例に説明します。
スプレッドシートのコンテナバインドスクリプトで下記のように実行します。
取得した複数のセル範囲の位置を for…of文で順番に表示しています。
getA1Notation()は、セルの位置を表示するメソッドです。
1 2 3 4 5 6 |
function myFunction() { const testRangeList = SpreadsheetApp.getActiveRangeList(); for (const testRange of testRangeList.getRanges()) { console.log(testRange.getA1Notation()); } } |
下記の実行結果になります。すべてのセル範囲の情報を取得できます。
1 2 3 |
F9:G11 C6:D7 B2:B4 |
なお、スタンドアロンスクリプトで同じコードを実行すると下記の実行結果になります。スプレッドシートファイルと紐づいておらず、testRangeListがnullになるためです。
1 |
TypeError: Cannot read properties of null (reading 'getRanges') |
現在のセルを取得する:getCurrentCell()
アクティブな(選択された)セルを取得する方法です。この方法は、コンテナバインドスクリプトである必要があります。
下記の状態を例に説明します。
スプレッドシートのコンテナバインドスクリプトで下記のように実行します。
getA1Notation()は、セルの位置を表示するメソッドです。
1 2 3 4 |
function myFunction() { const testCell = SpreadsheetApp.getCurrentCell(); console.log(testCell.getA1Notation()); } |
下記の実行結果になります。
複数選択していても現在選択している1つのセルを取得します。
1 |
B2 |
なお、スタンドアロンスクリプトで同じコードを実行すると下記の実行結果になります。スプレッドシートファイルと紐づいておらず、testCellがnullになるためです。
1 |
TypeError: Cannot read properties of null (reading 'getA1Notation') |
各種コンテンツをアクティブにする
シートやセル範囲などの各種コンテンツをアクティブにする(選択状態にする)メソッドを説明します。
スプレッドシートをアクティブにする:setActiveSpreadsheet(newActiveSpreadsheet)
指定したスプレッドシートをアクティブにする方法です。
下記のように実行します。
「XXXXXXXX」の部分には、スプレッドシートIDが入ります。
1 2 3 4 5 6 7 |
function myFunction() { console.log(SpreadsheetApp.getActiveSpreadsheet().getName()); const testSpreadSheet = SpreadsheetApp.openById("XXXXXXXX"); SpreadsheetApp.setActiveSpreadsheet(testSpreadSheet); console.log(SpreadsheetApp.getActiveSpreadsheet().getName()); } |
実行結果は下記になります。「無題のスプレッドシート1」がアクティブだったものが、「無題のスプレッドシート2」がアクティブに変わっています。
1 2 |
無題のスプレッドシート1 無題のスプレッドシート2 |
シートをアクティブにする:setActiveSheet(sheet)
指定したシートをアクティブにする方法です。この方法は、コンテナバインドスクリプトである必要があります。
スプレッドシートのコンテナバインドスクリプトで下記のように実行します。
1 2 3 4 |
function myFunction() { const testSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); SpreadsheetApp.setActiveSheet(testSpreadSheet.getSheetByName("シート2")); } |
下記の状態で実行すると、
下記のように、指定したシートが選択された状態になります。
セル範囲をアクティブにする:setActiveRange(range)
指定したセル範囲をアクティブにする方法です。この方法は、コンテナバインドスクリプトである必要があります。
スプレッドシートのコンテナバインドスクリプトで下記のように実行します。
1 2 3 4 |
function myFunction() { const testRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1").getRange("B2:D4"); SpreadsheetApp.setActiveRange(testRange); } |
下記の状態で実行すると、
下記のように、指定したセル範囲が選択された状態になります。
複数のセル範囲をアクティブにする:setActiveRangeList(rangeList)
指定した複数のセル範囲をアクティブにする方法です。この方法は、コンテナバインドスクリプトである必要があります。
スプレッドシートのコンテナバインドスクリプトで下記のように実行します。
1 2 3 4 |
function myFunction() { const testRangeList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1").getRangeList(["C6:E9", "B2:D4"]); SpreadsheetApp.setActiveRangeList(testRangeList); } |
下記の状態で実行すると、
下記のように、指定した複数のセル範囲が選択された状態になります。
セルをアクティブにする:setCurrentCell(cell)
指定したセルをアクティブにする方法です。この方法は、コンテナバインドスクリプトである必要があります。
スプレッドシートのコンテナバインドスクリプトで下記のように実行します。
1 2 3 4 |
function myFunction() { const testCell = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1").getRange("C3"); SpreadsheetApp.setCurrentCell(testCell); } |
下記の状態で実行すると、
下記のように、指定したセルが選択された状態になります。
まとめ
Google Apps Script (GAS) でスプレッドシートのシートやセル範囲等を取得する方法や、指定したシートやセル範囲等をアクティブにする方法を説明しました。
GASは無料で利用できてとても便利なツールです。
Googleスプレッドシート等のGoogleアプリケーションを利用されている方は、GASを習得することで作業を大きく効率化できます。
GASの基本構文を知りたい方は、下記もご覧ください。