GoogleAppsScript(GAS)からスプレッドシートを操作する方法

本ページはプロモーションが含まれています。
Google Apps Script スプレッドシートの使い方

GoogleAppsScript(GAS)入門講座の第2回目です。

この記事では、GASから「Googleスプレッドシート」を操作する基本的な方法を解説します。

ぜひこの記事を参考にして、GASによる自動化の基礎を身に付けて頂ければ幸いです。

なお、GASの特徴や基本操作については、下記の記事をご覧ください。

GASの特徴と基本操作

それでは早速、GASを使ったスプレッドシートの操作方法を見ていきましょう。

目次

GASを使ったスプレッドシートの操作方法

Google Apps Script(GAS)を使ったスプレッドシートの操作

まずはスプレッドシートの主なクラス(オブジェクト)を確認したのち、簡単なGASのコードを書いていきます。

スプレッドシートの主なクラス(オブジェクト)

GASを使ってスプレッドシートを操作するために、主なクラス(オブジェクト)を確認しておきましょう。

スクロールできます
クラス説明
SpreadsheetAppSpreadsheetサービスの最上位のオブジェクト。SpreadsheetオブジェクトやSheetオブジェクトを取得できる。
Spreadsheetスプレッドシートを操作する各種機能を提供するオブジェクト。アクティブなセル範囲を取得するなど、様々な機能を提供する。
Sheetシートを操作するためのオブジェクト。指定のシートをアクティブにするなど、多彩な機能を提供する。
Range単一セルまたはセル範囲を意味するオブジェクト。セルのフォント色を変更するなど様々なメソッドがある。
主なクラスと、その説明

直観的な理解を助けるため、上記の表を図でも確認しておきます。

Spreadsheetサービスの主なクラス

目次へ戻る

簡単なGASのサンプルコードを書いてみよう!

では早速、上記で解説したスプレッドシートの代表的なクラス(オブジェクト)を使ってみましょう。

以下は、今回のサンプルコードで、アクティブなスプレッドシートを取得し、スプレッドシート名をコンソールに表示します。

function sample1() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  console.log(ss.getName());  
}
GASのsample1の入力画面

プロジェクト名を「サンプルコード」にし、ファイル名を「sample1.gs」とします。

その上で、上記のサンプルコードを入力します。

サンプルコードを[保存]して[実行]すると、「権限の許可」が求められるので、下記画像に従ってサンプルコードの実行を許可します。

GASの承認1

上記の画面が出たら[権限を確認]をクリックします。

権限の確認]を押すと、下記のような画面に遷移します。

GASの承認2

ここでは、[ご自身のGoogleアカウント]を、クリックしてください。

すると、次のような画面に遷移します。

GASの承認3

上記画像に従って[詳細]をクリックします。

すると、下記の画面が表示されます。

GASの承認4

ここでは[サンプルコード(安全ではないページ)に移動]をクリックします。

すると次の画面に遷移します。

GASの承認5

最後に[許可]をクリックすれば、「権限の許可」は完了です。

[許可]をクリックすると、先程の”sample1”が実行されます。

実行結果は、以下の通りです。

GASのサンプルコード1のソースコードと実行結果

無事、[実行ログ]に、「GAS入門」と、アクティブなスプレッドシートのタイトル名が表示されれば成功です!

サンプルコードの解説

それでは、今回入力したサンプルコードについて、解説します。

function sample1() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  console.log(ss.getName());  
}
constとは?
const ss = SpreadsheetApp.getActiveSpreadsheet();

constは、変数宣言で、「これから変数を使いますよ!」という意味です。

変数宣言の方法には、他にもvarletがありますが、const再代入再宣言のできない宣言方法です。

再代入とは、同じ変数に、別の値をセットすること。再宣言とは、同じ変数名で再び変数を宣言することを意味します。

変数「ss」はデータを上書きする予定のない変数なので、constで宣言しているのですね。

const”は上書きする予定のない変数に使う宣言!

SpreadsheetAppオブジェクトとは?
const ss = SpreadsheetApp.getActiveSpreadsheet();

SpreadsheetAppは、スプレッドシート全体を意味する、トップレベルのオブジェクトです。

一方、getActiveSpreadsheet()メソッドは、アクティブなスプレッドシートを取得します。

つまりSpreadsheetApp.getActiveSpreadsheet()は、「スプレッドシート全体の中から、アクティブなスプレッドシートを取得せよ」という命令です。

その結果(戻り値)を、変数「SS」に格納しています。

変数「SS」には、「アクティブなスプレッドシート(Spreadsheetオブジェクト)」が格納されているのです。

Spreadsheetオブジェクトを取得するには、
SpreadsheetApp.getActiveSpreadsheet()を使う!

getName()
console.log(ss.getName());

変数「SS」の中身は、Spreadsheetオブジェクトで、getName()はSpreadsheetオブジェクトのメソッドです。

また、getName()は、スプレッドシート名を返すメソッドを意味します。

console.log()はコンソールに結果を表示する命令なので、console.log(ss.getName());で、スプレッドシート名をコンソールに表示しています。

Spreadsheetオブジェクト.getName()で、スプレッドシート名を取得することができる!

続いて、次のサンプルコードを見ていきましょう!

Rangeオブジェクトを使ってみよう!

今度は、Rangeオブジェクトを使ったサンプルコードを見ていきましょう。

先程と同じくプロジェクト名を「サンプルコード」とし、ファイル名を「sample2.gs」とします。

今回は、元データを用意しました。

GAS入門のサンプルデータ

この元データを元に、Rangeオブジェクトの使い方を学んでいきましょう。

サンプルコードは以下の通りです。

function sample2() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getActiveSheet();
  console.log(sh.getRange(1,1).getValue());
  console.log(sh.getRange('A2').getValue()); 
}

実行結果は、下記の通りです。

サンプルコード2の実行結果

サンプルコードの解説

SpreadsheetApp.getActiveSpreadsheet()
const ss = SpreadsheetApp.getActiveSpreadsheet();

変数「SS」に、スプレッドシートオブジェクトを代入しています。

getActiveSheet()
const sh = ss.getActiveSheet();

スプレッドシートシート」の順に取得しています。getActiveSheet()はスプレッドシートクラスのメソッドで、「シートオブジェクト」を取得します。

つまり、Rangeオブジェクトを操作するために、「SpreadsheetAppSpreadsheetSheetRange」と順番に階層を下っているということです。

スクロールできます
クラス説明
SpreadsheetAppSpreadsheetサービスの最上位のオブジェクト。SpreadsheetオブジェクトやSheetオブジェクトを取得できる。
Spreadsheetスプレッドシートを操作する各種機能を提供するオブジェクト。アクティブなセル範囲を取得するなど、様々な機能を提供する。
Sheetシートを操作するためのオブジェクト。指定のシートをアクティブにするなど、多彩な機能を提供する。
Range単一セルまたはセル範囲を意味するオブジェクト。セルのフォント色を変更するなど様々なメソッドがある。
主なクラスと、その説明
getRange()
  console.log(sh.getRange(1,1).getValue());
  console.log(sh.getRange('A2').getValue()); 

変数「sh」にはシートオブジェクトが格納されているので、getRange()を使うことで、「SheetオブジェクトRangeオブジェクト」の順に、階層をたどっています。

セルの指定は数値(1,1)のように指定する方法と、文字列(‘A2’)のように指定する方法があります。

数値でセルを指定する方式を使えば、getRange(a, b)のように、セル指定に整数型の変数を使えて便利です。

一方、getRange(‘A1’)getRange(‘B2’)のように、アドレスでセルを指定するとわかりやすいというメリットがあります。

また、getRange(1,1).getValue()getValue()は、「セルの値」を取得するメソッドです。

Rangeオブジェクト.getValue()でセルの値を取得できる!

セルに値を”入力”するには、Rangeオブジェクト.setValue(値)を使います。

セル範囲の値を配列で一括で取得するには、Rangeオブジェクト.getValues()を用います。一方、セル範囲に一括でデータを入力するには、Rangeオブジェクト.setValues(配列)が便利です。

目次へ戻る

複数のセル範囲の値を配列で取得する方法

ここからは、セル範囲(複数のセル)を処理する、Rangeオブジェクトの使い方を見ていきましょう。

今回も前回同様に、下記の模擬データを使用します。

GAS入門のサンプルデータ

実際に、上記のデータを準備した後、下記のサンプルコードを入力して頂ければ幸いです!

function sample3() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getActiveSheet();
  console.log(sh.getRange(1, 1, 4, 2).getValues()); 
  console.log(sh.getRange('A1:B4').getValues());
}

実行結果は、下記画像のようになります。

GASのサンプルコード3の実行結果

getRange(1, 1)A1セルを表しますが、複数のセル範囲をgetRange()で表現するには、3つないし4つ引数を使います。

getRange()で複数のセル範囲を表す文法は以下のようになります。

Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数)

たとえばgetRange(1, 1, 4, 2)は、「A1セル」から見て4行2列目を表します。

getRangeメソッドでA1セルから4行2列目を選択している状態
A1セルから見て4行2列目

Rangeオブジェクト.getValues()は、複数のセル範囲を2次元配列として返します。

2次元配列は難しい概念ではありません。

1次元配列が[1, 2, 3, …]という直線上のデータなのに対して、2次元配列とは、配列の要素が配列の場合です。

2次元配列の図解
2次元配列の図解

例えば上図の2次元配列は、[[“a”, “b”, “c”], [“d”, “e” “f”], [“g”, “h”, “y”]]という構造になっており、[0, 0]“a”を表し、[1, 2]“f”を表しています。

配列の添字は1番目からではなく0番目から始まる点に注意してください。

例えば1つ目の要素は[0]です。

つまり[0, 0]は1つ目の配列の中の、1つ目の要素を表しています。

また、文字列でセル範囲を指定する場合は、Sheetオブジェクト.getRange(‘始点:終点’)のように書きます。

つまり、getRange(1, 1, 4, 2)getRange(‘A1:B4’)は同じ意味です。

目次へ戻る

まとめ:GASでスプレッドシートを操作するポイント

この記事のまとめ
  • SpreadsheetApp:Spreadsheetサービスの最上位のオブジェクト
  • Spreadsheet:スプレッドシートを操作する各種機能を提供するオブジェクト
  • Sheet:シートを操作するためのオブジェクト
  • Range:セルを意味するオブジェクト
  • Sheetオブジェクト.getRange():セルの取得
  • getValue()/setValue():単一セルへの値の入出力
  • getValues()/setValues():セル範囲への値の入出力

以上で、GASによるスプレッドシートの基本操作の解説を終わります。

ここまで読んで頂き、ありがとうございました!

\即戦力スキルが身につくプログラミングスクール/

無料体験受付中!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれないコメントは無視されますのでご注意ください。(スパム対策)

目次