みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けにBotづくりを目指してGoogle Apps Scriptプログラミングの基礎をシリーズでお伝えしています。
前回の記事はこちら。
GASでスプレッドシートのシートを取得する方法についてお伝えしました。
今回は、その続きとして、Google Apps ScriptでRangeオブジェクト、つまり、セルやセル範囲とその値を取得する方法についてお伝えします。
では、行ってみましょう!
前回までのおさらいと今回のお題
題材としているスプレッドシートはこちらです。
まず、Bot作りをするために、このリストからあるセルを取得する必要があるとします。例えば、A3セルの値を取得するのであれば
- スプレッドシート「名言Bot」をSpreadsheetオブジェクトとして取得する
- そのSpreadsheetオブジェクトの配下にあるシート「シート1」をSheetオブジェクトとして取得する
- そのSheetオブジェクトの配下にあるA3セルをRangeオブジェクトとして取得する
- そのRangeオブジェクトの値を取得する
という手順のスクリプトを組む必要があります。
前回までのおさらいとして、以下のスクリプトを組んでみました。
function myFunction() { const sheet = SpreadsheetApp.getActiveSheet(); console.log(sheet.getName()); }
これで、上記手順の1,2まで、つまりSheetオブジェクトは取得できましたので、今回はその残り、セルとその値の取得を目指していきたいと思います。
getRangeメソッドでセル範囲を取得する
Sheetオブジェクトの特定のセルまたはセル範囲を取得するにはgetRangeメソッドを使います。
getRangeメソッドは、以下の2通りの使い方があります。
- アドレスを指定してセル範囲を取得する
- 行番号、列番号、行数、列数を指定してセル範囲を取得する
アドレスを指定してセル範囲を取得する
まずアドレスを指定する方法です。
アドレスは「A3」や「A1:E5」などといった、セルのアドレスです。
普段スプレッドシートを使用していればわかりますよね。
アドレスを文字列としてgetRangeメソッドの引数として渡すことで、そのセル範囲を取得することができます。
行番号と列番号を指定してセルを取得する
もう一つは行番号と列番号を数値で指定してセルを取得する方法です。
例えば
- A1セルであれば、1行目1列目
- C5セルであれば、5行目3列目
となりますね。
こちらは数値で指定できますので、反復処理などで整数型の変数を使うことができます。
単体のセルとその値を取得する
では、まず単体のセルとその値を取得してみましょう。
例えば、以下のようにすれば、A3セルの値をログ出力することができます。
function myFunction() { const sheet = SpreadsheetApp.getActiveSheet(); const range = sheet.getRange('A3'); console.log(range.getValue()); }
結果はこちらですね。
ちゃんとA3セルの値がログ出力されているのが確認できます。
getValueメソッドでセルの値を取得する
上記スクリプトで使用されているgetValueメソッドですが、これは単体セルの値を取得するメソッドです。
複数セルとその値を取得する
では、例えば以下のようなスクリプトを実行したらどうなるでしょうか。
function myFunction() { const sheet = SpreadsheetApp.getActiveSheet(); const range = sheet.getRange('A3:C4'); console.log(range.getValue()); }
取得しているRangeオブジェクトは「セル範囲」ですが、値の取得は単体セル用のgetValueメソッドですよね。
実行すると以下のようになります。
先程と全く同じですね。
つまり、Rangeオブジェクトがセル範囲の場合にgetValueメソッドを使うと、セル範囲の一番左上のセルの値のみを取得するということになります。
getValuesメソッドでセル範囲の値を取得する
さて、セル範囲の値をまとめて取得したい場合には、getValuesメソッドを使う方法があります。getValuesということで、複数形ですね。
書き方はこちらです。
例えば、以下のスクリプトを実行してみましょう。
function myFunction() { const sheet = SpreadsheetApp.getActiveSheet(); const range = sheet.getRange('A3:C4'); console.log(range.getValues()); }
わかりますでしょうか?
見やすく整理すると、以下のように二次元配列にセル範囲の値が格納されていることがわかります。
[ [A3セルの値, B3セルの値, C3セルの値], [A4セルの値, B4セルの値, C4セルの値] ]
各行のデータ群(レコード)が配列になっていて、それを要素とする二次元配列になっているということです。
このシリーズの後半で配列について触れていきますが、スプレッドシートのセル範囲はよくこのような二次元配列として取り扱うのが有効な手段となりますので、なんとなく覚えておいていただければと思います。
まとめ
以上、Google Apps Scriptでセルやセル範囲とその値を取得する方法についてお伝えしました。
- getRangeメソッドでセルやセル範囲を取得する
- getValueメソッドで単体セルの値を取得する
- getValuesメソッドでセル範囲の値を配列として取得する
getRangeオブジェクトのもう一つの使い方である行番号や列番号を使う方法、またセル範囲を二次元配列で扱う方法については、またシリーズ後半の別の記事で紹介していきますね。
さて、次回ですが、スプレッドシートの上から順番にセルの値を取得する方法についてお伝えします。
どうぞお楽しみに!
連載目次:超初心者向けGASでBotを作りながら基礎を学ぶ
Google Apps Script(GAS)をはじめるためのメリットは山程ありますが、何を作ったらいいの?と悩んでしまうこともありますよね。そんな時に、おすすめしたいのが「Bot」の作成です。このシリーズでは、超初心者向けにGASでBotを作る方法を題材としながら、GASプログラミングの一通りの流れと書き方について学んでいきます。- 【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
- 【初心者向けGAS】はじめてのスクリプトを作成し、保存し、実行する
- 【初心者向けGAS】プログラミングに必須の変数&定数の使い方とデータ型について
- 【初心者向けGAS】ログを表示するconsole.logの使い方とテンプレート文字列
- 【初心者向けGAS】スクリプト実行時の「承認」でびっくりしないために
- 【初心者向けGAS】Spreadsheetサービスの「オブジェクト」の基礎の基礎を知ろう
- 【初心者向けGAS】スプレッドシートのシートを取得する2つの方法
- 【初心者向けGAS】スプレッドシートのセル・セル範囲とその値を取得する方法
- 【初心者向けGAS】for文を使ったスプレッドシートの繰り返しの超基本
- 【初心者向けGAS】条件分岐をするif文の使い方の超基本
- 【初心者向けGAS】スプレッドシートのセルに値を入力する基礎の基礎
- 【初心者向けGAS】条件に応じてループを制御する2つの方法~break文とwhile文~
- 【初心者向けGAS】スプレッドシートのセル範囲を行数・列数を使って取得する
- 【初心者向けGAS】スプレッドシートのセル範囲をクリアするいくつかの方法
- 【初心者向けGAS】Google Apps ScriptでWeb APIを活用するための基礎知識
- 【初心者向けGAS】面倒なことはライブラリに任せよう!その概要と追加の方法
- 【初心者向けGAS】Chatworkのマイチャットにメッセージを送る最も簡単な例
- 【初心者向けGAS】Google Apps Scriptで別の関数を呼び出すfunctionの書き方
- 【初心者向けGAS】時限式のイベントトリガーを設置して決まった時刻にBotを送信する方法
- 【初心者向けGAS】プロパティストアの概要とスクリプトプロパティの編集方法
- 【初心者向けGAS】スクリプトプロパティを操作してそのデータを取り出す方法
- 【初心者向けGAS】スプレッドシートのセル範囲の値を二次元配列として取得して取り扱う方法
- 【初心者向けGAS】Chatworkのメッセージ記法でBot送信するメッセージを装飾する方法
- 【初心者向けGAS】Google Apps Scriptのドキュメンテーションコメントの書き方