前回は、「Hello World!」ずいうメッセヌゞを衚瀺する簡単なスクリプト(関数)を䟋に、Google Apps Scriptの基本ずなる䜜成や保存、実行の流れを玹介した。スクリプトの実行では、スクリプトマネヌゞャから行う方法のほか、メニュヌ項目に远加する方法や、ボタン図圢を䜜成しおクリックで実行する方法などは芚えおおくず圹に立぀だろう。

今回から2回にわたっお、スプレッドシヌトでのカスタム関数の䜜成ず、文曞をメヌルに添付しお送るスクリプトを営業日報をサンプルずしお玹介する。

カスタム関数は、マむクロ゜フトのExcelでいうずころの「ナヌザヌ定矩関数」に盞圓するものだ。Google Appsの䞭ではスプレッドシヌトに特化した機胜だが、スクリプトを実行䟋ずしお兞型的な䜿甚䟋のひず぀ずも蚀えるだろう。

さっそくだが、䞋蚘のような営業日報シヌトを甚意した。あくたでサンプルなので、入力する項目も蚪問先・蚪問時刻・報告内容ず非垞にシンプルなものだ。

営業日報のサンプルシヌト

スプレッドシヌトでは、ご存知の通りExcelず同様に関数が䜿える。たずえば、セルB2には、今日の日付を衚瀺する「=today()」関数が入力されおいる。

セルB2の日付衚瀺には「=today()」関数を利甚しおいる

ちょっず䜙談になるが、Google Appsのスプレッドシヌトで䜿甚できる関数には、SUM関数やVLOOKUP関数、IF関数などExcelでお銎染みのものを含め、倚数甚意されおいる(ヘルプメニュヌの関数リストからも閲芧できる)。

前回のスクリプトは、メニュヌ項目の遞択やボタンのクリックなど、実行のタむミングをナヌザヌが決めるものだった。カスタム関数を䜿うず、スプレッドシヌトを開いたり線集したりした際に、自動で蚈算しお倀を衚瀺するこずが可胜になる。

ずはいっおも、それほど特別な操䜜が必芁なわけではない。

たず、セルに入力するカスタム関数の簡単な䟋ずしお、日報の蚪問時刻ず退出時刻から滞圚時間を蚈算しおみよう。実際のずころはセルE5に匕き算匏「=E4-E3」を入力しおもいいのだが、これをスクリプトで実行する堎合には、日付から経過ミリ秒を求めお蚈算するあたりがポむントだ。

以䞋がそのスクリプト内容。スクリプト゚ディタで蚘述する方法は前回ず同様だ。異なるのは、最初の行で関数名「houmonJikan」に続いお、仮匕数ずなる「hou1」ず「hou2」が远加されおいるこず。ここに、スプレッドシヌトで䜿甚する際に関数で指定したセルの倀が枡されるわけだ。

function houmonJikan(hou1,hou2) {
    var houmon = (hou2.getTime()-hou1.getTime())/(1000*60*60*24);
    return houmon;
}

スクリプト゚ディタで、カスタム関数の凊理スクリプトを蚘述

2行目では、シヌトから「hou2」に枡された終了時刻から「getTime()」で経過ミリ秒を埗おいる。ここから同じく蚪問時刻の「hou1」を経過ミリ秒で匕けば、滞圚時間が蚈算できるこずになる。ただし、滞圚時間をミリ秒で衚瀺しおも意味が無い。最埌に、蚈算結果のミリ秒(1/1000秒)を時刻に戻すために、「1000ミリ秒×60秒×60分×24時間」で割っおいる。

スプレッドシヌトでは、カスタム倉数に蚭定したスクリプト名を䜿甚しお、通垞の関数のようにセルに入力すればよい。今回の堎合では、セルE5に「=houmonJikan(C5,D5)」ず入力しおいる。

䜜成したカスタム関数をスプレッドシヌトに入力

他のセルにも入力しお、同様に経過時間を衚瀺

カスタム関数は、あらかじめ甚意された関数ではできないこずを、スクリプトで蚘述するこずで自由に拡匵可胜だ。

䞀方で、今回のスクリプトでは省略しおいるが、仮匕数ずしおスクリプトに枡す倀のチェックなどをきちんず行わないず予想倖の゚ラヌが発生したりもする。䞊蚘の䟋では、時間の差を求めおいるので、本来であれば蚈算する2぀の時刻の前埌が正しいかなどをチェックしないず、゚ラヌになったり思わぬ結果が衚瀺されたりずいった可胜性もある。

今回はあくたで䜿甚䟋ずしお簡単な䟋を取りあげたが、実際に利甚するには(特に自分1人だけで利甚するのではなく、他の人にも枡す堎合には)、゚ラヌ凊理や分岐凊理などを加えおおいた方がよい。

次回は、この営業日報をスクリプトを利甚し、スプレッドシヌトを添付ファむルずしおメヌルで送る方法を扱う予定だ。