連載
» 2017年02月09日 05時00分 UPDATE

Excel VBAプログラマーのためのGoogle Apps Script入門(2):GASでGoogleスプレッドシートのセルの値、行数や列数を取得したり、セルに値を入力したりする基本 (1/2)

Googleが提供するGoogle Apps Script(GAS)のプログラミングで、Google Apps(主にスプレッドシート)を操作する方法を解説していく連載。今回は、スプレッドシートのオブジェクトを整理し、セル操作に関する基本的なメソッドの使い方を紹介する。

[薬師寺国安,PROJECT KySS]

 本連載「Excel VBAプログラマーのためのGoogle Apps Script入門」では、Googleが提供する「Google Apps Script」(GAS)のプログラミングで、「Google Apps」を操作する方法を「Google Sheets」(スプレッドシート)を中心に解説していく。

 初回の「Google Apps Scriptプログラミングでスプレッドシートを操作するための基礎知識」では、Google Apps Scriptやスプリプトエディタの概要、スプレッドシートを表示し、Browser.msgBoxメソッドでメッセージを表示する手順などについて解説した。

 今回から、Google Apps Scriptのスプレッドシート用のオブジェクトやメソッドの使い方を詳しく見ていく。まずは、スプレッドシートのセルの値、行数や列数を取得したり、セルに値を入力したりするなど、基本操作の仕方を解説する。

Google Sheets(スプレッドシート)のオブジェクト

 Google Apps Scriptでは、Google Sheets(スプレッドシート)は「SpreadsheetApp」オブジェクトとして用意されていて、下記のように複数のオブジェクトで構成されている。

  • スプレッドシートアプリケーション:アプリケーションの本体。「SpreadsheetApp」オブジェクトとして用意されている
  • スプレッドシート:スプレッドシートのドキュメント本体。「Spreadsheet」オブジェクトとして用意されている
  • シート:各シートは「Sheet」オブジェクトとして扱う
  • レンジ:「セルの範囲」を示すもので、「Range」オブジェクトとして用意されている

 Excel VBAでは、それぞれ、Application、Workbook、Worksheet、Rangeオブジェクトが同様のものといっていいだろう。

VBAにおけるExcelオブジェクトの階層構造(記事「初心者でも図解で分かる! VBEの基本的な使い方とVBAプログラムの基礎文法」から引用)

 JavaScriptの「オブジェクト」について知りたい方は、下記記事を参照してほしい。

Sheetオブジェクトを取得するSpreadsheetApp.getActiveSheetメソッド

 まず、選択されたシートを取得するコードの書き方は下記のようになる。

var sheet=SpreadsheetApp.getActiveSheet();
Sheetオブジェクトを取得するコード

 ここではSheetオブジェクトを変数「sheet」に格納している。

 JavaScriptの「変数」について知りたい方は、下記記事を参照してほしい。

 sheetは、以降の説明で使用する。

Range(セルの範囲)オブジェクトを取得するgetRangeメソッド

 次に、Rangeオブジェクトを取得してみよう。

Rangeオブジェクトを取得するgetRangeメソッドの書式

var range=sheet.getRange("{セルの番地}")

var range=sheet.getRange("{セルの番地(始まり)}:{セルの番地(終わり)}")

var range=sheet.getRange({行番号},{列番号})

var range=sheet.getRange({行番号},{列番号},{行数})

var range=sheet.getRange({行番号},{列番号},{行数},{列数})


 {セルの番地}には、Excel同様「A1」「B1」「C3」などというふうに、列を表すアルファベットと行を表す数値を組み合わせて使う。{セルの番地(始まり)}:{セルの番地(終わり)}は例えば「A1:B1」と指定することで複数のセルを指定することができる。

 {行番号}{列番号}で指定する方法は、Excelの「R1C1参照形式」と同じだ。なおExcel VBAでは「Cells」というプロパティで「R1C1参照形式」を使うが、Google Apps ScriptではgetRangeメソッドのみで、「A1形式」「R1C1参照形式」どちらでも使える。

 さらに、Google Apps Scriptでは{行数}や{列数}をオプションで指定できる。例えば、下記のコードのようにすると、A1〜C3の3×3で9つのセルの値を取得することになる。{行数}や{列数}は省略した場合はデフォルトで「1」が指定される。

var range=sheet.getRange(1,1,3,3);

セルの値を取得する

 セルの値を取得してみよう。

1つのセルの値を取得するgetValueメソッド

1つのセルの値を取得するgetValueメソッドの書式

var {戻り値}=range.getValue();


 図1のような表で、氏名を入力したとしよう。

図1 氏名が入力された表

 スクリプトエディタを開き、リスト1のコードを入力する。

function mygetValueFunction() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var value=sheet.getRange("A2:A10").getValue();
  Browser.msgBox(value);
}
リスト1 1つだけの値を取得するコード

 実行すると、最初の値だけを取り出している(図2)。

図2 最初の値だけを取り出している

指定したセル全ての値を取得するgetValuesメソッド

 次に、指定したセル全ての値を取得してみよう。

指定したセル全ての値を取得するgetValuesメソッドの書式

var {戻り値}={Rangeオブジェクト}.getValues();


 先ほどとは違い、getValueではなくgetValuesと複数形になっている。ここで{戻り値}には配列が格納されることになる。

 JavaScriptの「配列」について知りたい方は、下記記事を参照してほしい。

 リスト1の「getValue()」を「getValues()」に変更して実行すると、図3のように表示される。

図3 全ての値を取得した
       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。