SHOEISHA iD

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

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

速習Google Apps Script

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

複数列に渡す範囲の処理

 ここまで行ってきたのは、基本的に「1列のみの処理」でした。しかし、表計算では複数列にまたがったデータを処理するのが一般的です。

 複数列に渡る範囲指定はgetValueの戻り値が二次元配列で返されるため注意が必要です。二重の繰り返しを用意して処理する必要があります。

function myFunction() {
  var range= SpreadsheetApp.getActiveRange()
  var values = range.getValues();
  var total = 0;
  for(var i = 0;i < values.length;i++){
    for(var j = 0;j < values[0].length;j++){
      total += values[i][j];
    }
  }
  Browser.msgBox("合計:" + total);
}
図10 修正したスクリプト。複数列を選択しても、全セルの値を合計できる。
図10 修正したスクリプト。複数列を選択しても、全セルの値を合計できる。

 先ほどのスクリプトを修正したものです。ここでは、二重のforを使い、getValuesで取得した配列から値を取得しています。このやり方であれば、選択されたセル範囲が1列であろうと複数列であろうと、正しく値が計算できます。

セルをまとめて操作する

 セルの値を取り出して処理するだけならgetValuesですみますが、セルを操作するとなるとまた話は変わってきます。単純に、Rangeのセルをまとめて操作するなら、作業は簡単です。そのままRangeの設定を変更すればいいだけですから。

function myFunction() {
  var range= SpreadsheetApp.getActiveRange()
  range.setValue("※選択されたセル");
}
図11 選択したセルに、行・列の値を設定する。
図11 選択したセルに、行・列の値を設定する。

 これは、選択されたセルすべてに「※選択されたセル」と表示させるものです。ここではgetActiveRangeで取得したRangeをそのままsetValueで設定しています。このRangeで示されているセルがいくつあろうと、すべてひとまとめにして操作を行うことができます。これは非常に簡単ですね!

セルの値を変更する

 問題は、1つ1つのセルを個別に設定する必要がある場合です。この場合は、各セルのRangeを取得し、それぞれを操作することになります。では、1つ1つのセルの値を設定するサンプルを考えてみましょう。

function myFunction() {
  var range= SpreadsheetApp.getActiveRange()
  var cols = range.getNumColumns();
  var rows = range.getNumRows();
  var total = 0;
  for(var i = 1;i <= rows;i++){
    for(var j = 1;j <= cols;j++){
      var cell = range.getCell(i, j);
      cell.setValue(i + "," + j);
    }
  }
}
図12 選択したセルに、行・列の値を設定する。
図12 選択したセルに、行・列の値を設定する。

 これは、選択されたセルすべてに、そのセルの行・列の相対番号を表示する例です。セルをいろいろと選択して動作を確かめてみるとよいでしょう。

 ここでは、選択されているRangeの範囲を調べ、その範囲内のすべてのセルについてRangeを取得しsetValueする処理を行っています。まず選択されたRangeの範囲ですが、これは次のようなRangeのメソッドで調べることができます。

Rangeのメソッド
メソッド名 概要
getNumColumns Rangeの列数を返す。
getNumRows Rangeの行数を返す。

 これで行・列それぞれの数が分かります。後は繰り返しを使い、Range内のそれぞれのセルのRangeを取得し、setValueで値を設定します。

var cell = range.getCell(i, j);
cell.setValue(i + "," + j);

 セルの取得は、Rangeに用意されている「getCell」で行います。これは引数に列・行の相対番号(Range内の何番目にあるかという番号)を指定して呼び出します。これで、そのセルのRangeが得られますので、後はsetValueを呼び出し値を設定するだけです。

次のページ
セルのプロパティを操作する

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
速習Google Apps Script連載記事一覧
この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5036 2010/04/22 19:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング