SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

速習Google Apps Script

Google Apps ScriptでGoogleドキュメントのスプレッドシートを操作する

Google Apps ScriptによるGoogleドキュメントの操作(1)


複数のセルの操作

 ここでは、Rangeで指定したのが1つのセルだけでしたから、単純にgetValue/setValueで値を操作できました。が、複数のセルを操作する場合はそうもいきません。getValueでは、選択された最初のセルの値しか取り出せないのです。このような場合には、「getValues」を使って、全セルの値をまとめて取得します。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var cells = sheet.getRange("A1:A3");
  var values = cells.getValues();
  var total = 0;
  for(var i in values){
    total += values[i] * 1;
  }
  Browser.msgBox("合計:" + total);
}
図8 A1~A3までのセルの合計を計算し表示する。
図8 A1~A3までのセルの合計を計算し表示する。

 これを実行すると、A1~A3セルの合計を計算して画面に表示します。ここでは、次のようにしてセルの値をまとめて取得しています。

var cell= sheet.getRange("A1:A3");
var values = cell.getValues();

 範囲を指定してセルのRangeを取得する場合、指定の仕方はいろいろとあるのですが、最も分かりやすいのは、"A1:A3"というように範囲の2点(左上と右下)のセルをコロンで区切ったテキストとして指定する方法でしょう。こうして範囲指定することにより、getRangeで複数のセルをまとめてあつかうRangeが取得できます。そこから値を取得する「getValues」は、Rangeで指定した全セルの値を配列としてまとめて返します。後は、その配列から順に値を取り出して処理していけばいいわけです(ただし、複数列に渡って選択されている場合には修正が必要です。これについては後述します)。

選択されたセルの処理

 続いて、Rangeの範囲をあらかじめ決めておくのではなく、ユーザーが選択した範囲のセルを操作してみることにしましょう。これは、1列のみ選択した場合とそうでない場合で若干違いがあります。まず、1列のみ選択された場合を見てみましょう。

function myFunction() {
  var range= SpreadsheetApp.getActiveRange()
  var values = range.getValues();
  var total = 0;
  for(var i in values){
    total += values[i] * 1;
  }
  Browser.msgBox("合計:" + total);
}
図9 選択した範囲のセルの合計を計算する。ただし、これは1列のみ選択した場合。
図9 選択した範囲のセルの合計を計算する。ただし、これは1列のみ選択した場合。

 選択された範囲は、SpreadsheetAppオブジェクトにある「getActiveRange」で得ることができます。後は、基本的に先のサンプルと同じです。getValuesで値をまとめて取得し処理するだけです。getActiveRangeを使えば、いちいちSheetを取得してRangeを取得してといった手順を省けるので、直接Rangeの範囲を指定するより処理が簡単です。

次のページ
複数列に渡す範囲の処理

この記事は参考になりましたか?

速習Google Apps Script連載記事一覧
この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5036 2010/04/22 19:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー