スプレッドシートでGoogle Apps Script(GAS)が使えるようになれば、いろいろなことが自動化できるようになります。
GASは、Googleが提供するサービスの1つです。JavaScriptベースのスクリプト言語で、Googleアカウントを持っていれば無料で使えます。
スプレッドシートでGASを使うための基本的なことについて解説します。
スプレッドシートでGASを使うには
スプレッドシートでGASを使うには、2つの方法があります。「Container Bound Script」と「Standalone Script」です。
- Container Bound Script:スプレッドシートなどのファイルに紐づいて存在
- Standalone Script:単独で存在
今回は「Container Bound Script」で説明します。
スプレッドシートに紐づくContainer Bound Scriptを作るには、スプレッドシートを開いて、「拡張機能」→「Apps Script」をクリックします。
スクリプトエディタが開くので、ここにスクリプトを書いていきます。
セルを選択するには
例えば、セルの値をコピーするには、まずは対象のセルを選択する必要があります。
GASで選択したセルをコピーするのに、いきなりコピーとしたいところですが、プログラムにはどのセルかわかりません。
そのため、どのスプレッドシートの、どのシートの、どのセルをコピーというように、順番に指定していく必要があります。
GASの場合は、「SpreadsheetApp」→「Spreadsheet」→「Sheet」→「Range」のように指定していきます。
- SpreadsheetApp:スプレッドシートサービスのメインクラス。GASでスプレッドシートを操作するにはまずこのクラス。
- Spreadsheet:スプレッドシートのクラス
- Sheet:スプレッドシートのシートのクラス
- Range:スプレッドシートのセルのクラス
以下は、選択しているセルの値をB1セルにコピーするスクリプトです。
見やすいようにスクリプトを改行しました。「SpreadsheetApp」→「Spreadsheet」→「Sheet」→「Range」の順番に指定しているのがわかるでしょうか?
function myFunction() {
//選択しているセルの値の取得
const value = SpreadsheetApp
.getActiveSpreadsheet() //スプレッドシートの指定
.getActiveSheet() //シートの指定
.getActiveRange() //セルの指定
.getValue(); //値の取得
//B1セルに取得した値を設定
SpreadsheetApp
.getActiveSpreadsheet() //スプレッドシートの指定
.getActiveSheet() //シートの指定
.getRange('B1') //セルの指定
.setValue(value); //値の設定
}
ちなみに、「SpreadsheetApp.getActiveSpreadsheet()・・・」のように毎回書かず、以下のように変数に代入して使うことが多いです。
function myFunction() {
//スプレッドシート
const activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
//シート
const activeSheet = activeSpreadsheet.getActiveSheet()
//選択しているセルの値の取得
const value = activeSheet.getActiveRange().getValue();
//B1セルに取得した値を設定
activeSheet.getRange('B1').setValue(value);
}
スクリプトの実行
スクリプトを実行してみましょう。
スクリプトエディタで保存をし、「実行」ボタンをクリックします。
初めて実行するときには、承認が必要になります。
A1セルを選択した状態で実行した結果です。B1セルにA1セルの値がコピーされています。
スクリプトの解説
Spreadsheetの指定
GASでスプレッドシートを操作するには、どのスプレッドシートなのかを指定する必要があります。
const value = SpreadsheetApp
.getActiveSpreadsheet() //スプレッドシートの指定
.getActiveSheet() //シートの指定
.getActiveRange() //セルの指定
.getValue(); //値の取得
今回は「getActveSpreadsheet()」で指定しています。
他にも、IDやURLでスプレッドシートを指定することもできます。
- SpreadsheetApp.openById(id):スプレッドシートのIDで指定
- SpreadsheetApp.openByUrl(url):スプレッドシートのURLで指定
スプレッドシートのIDは、スプレッドシートのURLで確認できます。
Sheetの指定
「getActveSpreadSheet()」でスプレッドシートの指定はできました。
const value = SpreadsheetApp
.getActiveSpreadsheet() //スプレッドシートの指定
.getActiveSheet() //シートの指定
.getActiveRange() //セルの指定
.getValue(); //値の取得
次は、シートの指定です。「getActiveSheet()」でシートを指定しています。
シートの名前や位置で指定することもできます。
- getSheetByName(name):シートの名前で指定
- getSheets()[index]:シートの位置で指定 ※一番左が0になるので注意
Rangeの指定
ここまで来てやっとセルの指定です。
const value = SpreadsheetApp
.getActiveSpreadsheet() //スプレッドシートの指定
.getActiveSheet() //シートの指定
.getActiveRange() //セルの指定
.getValue(); //値の取得
「getActiveRange()」でセルを指定しています。「getActiveRange()」は、1つのセルだけでなく、セルの範囲も取得することもできます。
「getRange()」を使えば、A1形式またはR1C1形式でセルの指定ができます
getRange(a1Notation):A1形式またはR1C1形式で指定
次のスクリプトは、A1セルの値をA1形式とR1C1形式で取得しています。
function myFunction() {
//スプレッドシート
const activeSheet = SpreadsheetApp.getActiveSheet()
//A1形式
const A1Value = activeSheet().getRange('A1').getValue();
//R1C1形式
const R1C1Value = activeSheet().getRange(1, 1).getValue();
}
セルを指定した後に、「getValue()」でセルの値を取得しています。
セルに値を設定するには「setValue()」を使います。
SpreadsheetAppで指定
GASでセルを選択するためには、「SpreadsheetApp」→「Spreadsheet」→「Sheet」→「Range」のように指定しました。
ちなみに、アクティブなシートやセルを選択するときは、以下のスクリプトも同じ動作をします。
function myFunction() {
//選択しているセルの値の取得
const value = SpreadsheetApp.getActiveRange().getValue();
//B1セルに取得した値を設定
SpreadsheetApp.getActiveSheet().getRange('B1').setValue(value);
}
初めに紹介した以下のスクリプトに比べてシンプルになっています。
function myFunction() {
//選択しているセルの値の取得
const value = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveRange().getValue();
//B1セルに取得した値を設定
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('B1').setValue(value);
}
これはアクティブなシートやセルを取得するメソッドが「SpreadsheetApp」に用意されているからです。
アクティブなシートやセルを選択する場合は、「SpreadsheetApp」の次にスプレッドシートを指定しなくても、いきなりシートやセルを指定できます。
まとめ
スプレッドシートでGASを使うためには、「SpreadsheetApp」を使います。
基本的には「Spreadsheet」→「Sheet」→「Range」のように順番に指定していきます。
アクティブなシートやセルを選択するときは、「SpreadsheetApp.getActiveRange()」のように指定することができます。
業務効率化には、バッチもおすすめです。
身近なこともGASなどのサービスを使うことで改善することができます。
こんな方法で?子育て家族の困りごとを解決した8つの方法 – Qiita
参考
Google スプレッドシートによる Apps Script の基礎 #2:スプレッドシート、スプレッドシート、範囲
Class SpreadsheetApp – GoogleDevelopers
Class Spreadsheet – GoogleDevelopers