SHOEISHA iD

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

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

速習Google Apps Script

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

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

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

関数を設定する

 続いて、スクリプトによる関数の設定についてです。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を使うようにされている、ということなのでしょう。

次のページ
選択範囲に応じた関数の設定

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

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

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング