
GASでオリジナル関数を作る(超初級)
お仕事で会話したときにこんな話題があった。
何ができるかを考えたときに、そもそもGASを使ったらどんなことができるかがわからない、なのでメンバーがその知識を持つことでもっといい案が出せるようにしたい。
tmdは強く思った
「せやな」 と。
ってことで、スプシのオリジナル関数の作り方をざっくり記事にしてみた。
※会話の内容は一語一句メモしたわけじゃないから微妙に違ってるかもしれない
Step0.GASのはじめかたの違い
GASは以下の通り2種類の始め方がありますが、Googleのサービスと連携したい場合は、基本的に前者で作成するのがおすすめです。
スプシ等のGoogleのサービスから始める方法
GoogleDriveの新規か右クリックから方法
スプシ等のGoogleのサービスから始める方法について
tmdが考える要点
・オリジナル関数としてサクッと呼び出せる
・コード内で「今開いてるスプシ」という書き方ができる
・ドライブ上だとGASを保持してるスプシ等かの判断が難しい
GoogleDriveの新規か右クリックから方法について
tmdが考える要点
・コード内で「あのIDのスプシ」とスプシを指定する書き方が必要になる
・ドライブ上で「GAS」であると表示されるので見たままGAS
てことで、今回は「スプシから始めます」
Step1.GAS、始めます。
以下の手順でGoogleAppsScriptの画面を出しましょう
スプレッドシートを開く
拡張機能を押す
AppsScriptを押す
これでAppsScriptの画面が起動しました。
Step2.コードを書きます。
とりあえず書いた値を返すものを書きましょう。
function test(e) {
return e;
};
書いたらCtrl+sか保存ボタンで保存します。
そのあとスプレッドシートで以下を入力します。
=test("テスト")
そうすると、セルの値がLoading…と表示された後に「テスト」と表示されます。
解説
この関数とコードはこんな感じの意味です。
=関数の名前(関数に渡す値)
function 関数の名前(関数から受け取った値) {
処理
return スプシに渡す値;
};
functionと()と{}はとりあえずGASのお作法と思ってください。日本の家屋の玄関で靴を脱ぐのと同じです。そういうものです。
今回は受け取った値を「e」という名前の箱に詰めて、処理は何もせずにreturnでeを返したので、スプシ上では渡した値と戻ってきた値が同じもので表示されました。
次のステップでは、計算をしてみましょう。
Step3.コードを拡張します。
試しにreturnのeに+1してみましょう。
function test(e) {
return e+1;
};
そうすると半角数字を渡したときは足し算され、文字列を渡したときは末尾に1が付与されて表示されます。
これがオリジナル関数の作り方です!!
とはいえこれだけだと面白味がないので、渡した日付が土日か土日以外かを判定しましょう。
Step4.土日の判定をする(祝日は判定しない)
曜日の判定を入れた場合こんな感じのコードになります。
function test(e) {
var dayOfWeek = e.getDay();
if (dayOfWeek == 0 || dayOfWeek==6) {
return "土日";
};
return "土日ではない";
};
受け取った値.getDay()というのは受け取った日付を曜日に置き換えしています。曜日は数字で0:日曜日~6:土曜日として返ってきます。
そのため、その値を別の箱に入れておきました。
var dayOfWeek = e.getDay();
dayOfWeekの値が土曜日か日曜日だった場合は「土日」と判定したいので「0」もしくは「6」の場合と表現するため以下の記述があります。
if (dayOfWeek == 0 || dayOfWeek==6)
ifは()の中に「もし**だったら」を書き、それに合致すると後ろの{}の中を処理するものです。
これでファイルを上書き保存して、さっそく関数を動かしてみましょう。
=test(today())
※この時、日付を手入力したはずなのにエラーって出たよ!って方。
もしかしたら関数に渡している値が日付型になっていないかもしれません。
関数がうまく動かないよって場合
確認事項1
A1にオリジナル関数を入れている場合、A2のセルに日付を入力してA2の値を参照してみましょう
なお、表示形式が書式なしテキストになっている場合は「日付に見えるけど文字型」です。表示形式を日付や標準にして再挑戦しましょう。
=test(A2)
確認事項2
date関数を使って渡してみましょう!
=test_data(date("2023","04","01"))
これで動いたでしょうか?
GASが書けたらいろんな便利ツールが開発できますので、いろいろ考えてみましょう。
もし余裕があったら便利だったオリジナル関数を晒していこうと思います。
それではまた会いましょう。