スプレッドシートでのGASの基本

book プログラミング

スプレッドシートでGoogle Apps Script(GAS)が使えるようになれば、いろいろなことが自動化できるようになります。

GASは、Googleが提供するサービスの1つです。JavaScriptベースのスクリプト言語で、Googleアカウントを持っていれば無料で使えます。

スプレッドシートでGASを使うための基本的なことについて解説します。

スプレッドシートでGASを使うには

スプレッドシートでGASを使うには、2つの方法があります。「Container Bound Script」と「Standalone Script」です。

  1. Container Bound Script:スプレッドシートなどのファイルに紐づいて存在
  2. Standalone Script:単独で存在

今回は「Container Bound Script」で説明します。

スプレッドシートに紐づくContainer Bound Scriptを作るには、スプレッドシートを開いて、「拡張機能」→「Apps Script」をクリックします。

spreadsheet-container-bound-script

スクリプトエディタが開くので、ここにスクリプトを書いていきます。

script-editor

セルを選択するには

例えば、セルの値をコピーするには、まずは対象のセルを選択する必要があります。

GASで選択したセルをコピーするのに、いきなりコピーとしたいところですが、プログラムにはどのセルかわかりません。

そのため、どのスプレッドシートの、どのシートの、どのセルをコピーというように、順番に指定していく必要があります。

GASの場合は、「SpreadsheetApp」→「Spreadsheet」→「Sheet」→「Range」のように指定していきます。

  • SpreadsheetApp:スプレッドシートサービスのメインクラス。GASでスプレッドシートを操作するにはまずこのクラス。
  • Spreadsheet:スプレッドシートのクラス
  • Sheet:スプレッドシートのシートのクラス
  • Range:スプレッドシートのセルのクラス

以下は、選択しているセルの値をB1セルにコピーするスクリプトです。

gas-range-copy-script

見やすいようにスクリプトを改行しました。「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);
}

スクリプトの実行

スクリプトを実行してみましょう。

スクリプトエディタで保存をし、「実行」ボタンをクリックします。

初めて実行するときには、承認が必要になります。

承認方法
  1. 「承認が必要」というウインドウで、「権限を確認」をクリック
  2. Googleアカウントでログイン
  3. 「このアプリはGoogleで確認されていません」の左下の詳細をクリック
  4. 「(GASの名前)(安全ではないページ)に移動」をクリック→「許可」

A1セルを選択した状態で実行した結果です。B1セルにA1セルの値がコピーされています。

gas-range-copy-done

スクリプトの解説

Spreadsheetの指定

GASでスプレッドシートを操作するには、どのスプレッドシートなのかを指定する必要があります。

const value = SpreadsheetApp
              .getActiveSpreadsheet() //スプレッドシートの指定
              .getActiveSheet()       //シートの指定
              .getActiveRange()       //セルの指定
              .getValue();            //値の取得

今回は「getActveSpreadsheet()」で指定しています。

他にも、IDやURLでスプレッドシートを指定することもできます。

  • SpreadsheetApp.openById(id):スプレッドシートのIDで指定
  • SpreadsheetApp.openByUrl(url):スプレッドシートのURLで指定

スプレッドシートのIDは、スプレッドシートのURLで確認できます。

spreadsheet-id

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

Class Sheet – GoogleDevelopers

Class Range – GoogleDevelopers

タイトルとURLをコピーしました