CodeZine(コードジン)

特集ページ一覧

Google Apps ScriptでスプレッドシートからGoogleドキュメント以外のサービスにアクセスする

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/04/26 14:00

目次

関数を設定する

 続いて、スクリプトによる関数の設定についてです。Googleスプレッドシートでは、各セルに関数を設定して自動計算させることが可能でした。セルを選択し、「挿入」メニューの「関数」から使用したい関数を選択することで、そのセルに関数の結果を表示させることができました。この「セルへの関数の設定」は、スクリプトから行うことも可能です。

 セルへの関数の設定は、Rangeオブジェクトの「setFormula」メソッドを呼び出して行います。これは、引数に関数のテキストを渡すことで、そのRangeのセルに関数を設定するものです。実際の利用例をあげましょう。

function setFunc(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(1,1).setFormula("=TODAY()");
}
図3 A1セルにスクリプトを使ってTODAY関数を設定する。セルをダブルクリックすると、関数が設定されていることが分かる。
図3 A1セルにスクリプトを使ってTODAY関数を設定する。セルをダブルクリックすると、関数が設定されていることが分かる。

 これは、A1セルにTODAY関数を設定するものです。これを実行すると、A1セルに今日の日付が表示されるようになります。セルをダブルクリックして、TODAY関数が設定されていることを確認してみるとよいでしょう。

setValueでも関数設定可能?

 Googleスプレッドシートの関数は、値と同じように設定をします。数値などを記入する代りに、「=関数名」と記述すると、自動的に関数として認識されるようになります。扱いが関数も普通の値と同様であるため、「なら、わざわざsetFormulaなど用意しなくとも、setValueで関数のテキストを設定すればいいのでは?」と思うかも知れません。

 ところが、これはうまくいきません。TODAY関数などのように単独で使うものはsetValueでも問題なく動くのですが、引数にセルの指定などを行う場合、setValueでは問題を起こすことがあります。例えば、このような場合です。

function setFunc(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange("A10").setValue("=SUM(A1:A9)");
}
図4 setValueで関数を設定するとなぜか実行されない。
図4 setValueで関数を設定するとなぜか実行されない。

 ここでは、A10セルに"=SUM(A1:A9)"と関数を設定しています。が、実際にやってみると分かりますが、セルには「#NAME?」とエラーが表示されてしまいます。念のためにセルをダブルクリックして設定されている値をチェックすると、「=SUM(A1:A9)」と正しく設定されています。それでもなぜか関数が機能しないのです。

function setFunc(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange("A10").setFormula("=SUM(A1:A9)");
}
図5 setFormulaで関数を設定すると問題なく動く。
図5 setFormulaで関数を設定すると問題なく動く。

 このように実行すると、今度は問題なく動きます。設定される値はどちらもまったく同じなのですが、setValueでは動かず、setFormulaではきちんと動くのです。どうやら、関数の引数にセルの指定を行う際、単に"A1:A9"といったテキストだけでなく、内部的に何か別の処理をしているのかも知れません。setValueではそうしたことが行われないため、関数設定についてはsetFormulaを使うようにされている、ということなのでしょう。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:速習Google Apps Script

著者プロフィール

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

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

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5