みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptを使ってスプレッドシートの自作関数を作る方法についてお伝えしています。
前回、以下記事で「消費税の税込計算をする関数」をお題として、スプレッドシート関数を作る初歩の初歩についてお伝えしました。
今回、もう一つ簡単なお題として、「西暦から和暦を求めるスプレッドシート関数」を作ってみたいと思います。
if~else if文の使い方、比較演算子、テンプレート文字列など、Google Apps Scriptの基本も合わせて紹介します。
では、行ってみましょう。
V8ランタイムの新構文を使っている場合の注意
前回の記事で、ドキュメンテーションコメントで「@customfunciton」パラメータを入れるとスプレッドシートでの補完が受けられるとお伝えしました。
しかし、「let」やテンプレート文字列をはじめ、V8ランタイムで新たに使用できるようになった構文をスクリプトファイル内で使用していると、補完が表示されなくなるようです。
おそらくバグか何かと思いますので、進捗があればこちらの情報も更新します。
なお、補完がされないだけで、カスタム関数としては問題なく機能します。
西暦から和暦を算出する
あれ?あのときって、平成28年だっけ?あれ?26年…いや、29年だった気もする…?
そんな感じでお役所の窓口とか銀行でわけわからなくなるときありますね。いつもスマホで「2016 平成」とか「今年 令和」などと検索してしまいます。
全部西暦に統一すればいいのに、と思います。
さて、その和暦年号ですが、西暦から和暦に変換するスプレッドシート関数を作りたいと思います。
例えば
とすると、「平成28」と表示したり
とすると、「明治44」と表示するという関数です。
(厳密には、年の途中で元号が切り替わっていたりするので、そこまで対応する必要がありますが、いったんざっくり「年」だけを対象に進めます。)
西暦と和暦の関係は?
先にロジックを考えてみましょう。西暦と和暦の関係は以下の表にまとめました。
年号 | 元年の西暦 |
---|---|
令和 | 2019 |
平成 | 1989 |
昭和 | 1926 |
大正 | 1912 |
明治 | 1868 |
ですから、1989年以上であれば平成の年号になりますね。そして、1989年が平成1年、1990年が平成2年、…ですからy年は平成(y – 1988)年になります。
同様に全てのパターンについては、yが西暦とすると
- 2019以上 →令和(y – 2018)
- 1989以上 →平成(y – 1988)
- 1926以上 →昭和(y – 1925)
- 1912以上 →大正(y – 1911)
- 1869以上 →明治(y – 1867)
- それ以外 →計算不能
というロジックになりますね。(明治より前の年号は…ちょっと大変なので不能とさせてもらいました。)
これをGoogle Apps Scriptのスクリプトにしていきます。
スクリプトエディタを使いますが、その使い方は前回の記事を参考にして下さいね。
西暦を和暦に変換する関数のスクリプト
以上のロジックをスクリプトにすると、このようになります。
function WAREKI(y){ let result = 10; if(y > 2018){ result = `令和${y - 2018}`; }else if(y > 1988){ result = `平成${y - 1988}`; }else if(y > 1925){ result = `昭和${y - 1925}`; }else if(y > 1911){ result = `大正${y - 1911}`; }else if(y > 1867){ result = `明治${y - 1867}`; }else{ result = '計算不能'; } return result; }
ちょっとごちゃついている感じもしなくもないですが…説明していきますね。
if~else ifで複数の条件分岐
なんとなくお分かりだと思いますが、Google Apps Scriptで条件に従って複数に処理を分岐させるには、if~else if文を使います。
書き方は
//処理1
}else if(条件2){
//処理2
…
}else{
//どの条件も当てはまらなかったときの処理
}
となります。
- 条件1が成立していれば処理1が実行されます。
- 成立しなければ条件2が評価され、それが成立していれば処理2が実行されます。
- 最後までどの条件の成立しなければ、elseの後の処理が実行されます。
else ifブロックやelseブロックは不要であれば省略しても大丈夫です。
条件に使う比較演算子
今回のスクリプトでは「より大きい」を表す比較演算子「>」を使っています。条件を表現するには、この比較演算子たちがよく使われます。
Google Apps Scriptでは以下比較演算子を使用できるので、合わせて覚えておくと良いです。
- 等しい(==)
- 等しくない(!=)
- より大きい(>)
- 以上(>=)
- より小さい(<)
- 以下(<=)
ちなみに、条件が成立している場合はその値はture、そうでない場合はfalseという値をとっている、というのを覚えておくと良いです。
テンプレート文字列
今回、戻り値として返すのは「令和2」などという「文字列」になります。
その文字列を生成するために「y – 2018」といった計算式を文字列に埋め込みたいわけです。
そのようなときに便利なのがテンプレート文字列です。
以下のように記述します。
`文字列1 ${式} 文字列2`
バックダッシュ「`」で囲った範囲がテンプレート文字列となります。
その間に「${式}」という形式で、式を埋め込むことができます。これをプレースホルダーといいます。
例えば、令和の文字列を生成するには、以下のようにすればいいわけです。
result = `令和${y - 2018}`
実行結果
では、作成したスプレッドシート関数WAREKIを使ってみましょう。
ちゃんと変換されていますね。
まとめ
Google Apps Scriptで西暦を和暦に変換する自作のスプレッドシート関数を作成しました。
if~else if文、条件と比較演算子、テンプレート文字列などについても解説しました。この辺も超大事な基本になります。
さて、次回ですが、クラウド上にあるスプレッドシートならではということで、REST APIを使った郵便番号の自作関数を作ってみたいと思います。
どうぞお楽しみに!