みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
新しい元号が「令和」に決まりましたね!
以前、こんな記事を書いておりました。
西暦を和暦に変換するGoogle Apps Scriptのスクリプトです。
で、令和の計算も入れておこうということで、今回はGoogle Apps Scriptで西暦を和暦に変換するスクリプト「令和」対応版を紹介したいと思います。
では、行ってみましょう!
前回のおさらい
では、前回のおさらいから。
まず、スプレッドシートにバインドするスクリプトでreturnを持つ関数は、スプレッドシートのカスタム関数として機能するというとても素敵な事実があります。
なので、それを利用して和暦変換のカスタム関数を作ったんですね。
スクリプトはこちらでした。
/** * 西暦から和暦を返すカスタム関数 * * @param {Number} 西暦 * @return {String} 和暦 * @customfunction */ function WAREKI(n){ var result; if(n >= 1989){ result = "平成"+(n-1988); }else if(n >= 1926){ result = "昭和"+(n-1925); }else if(n >= 1912){ result = "大正"+(n-1911); }else if(n >= 1868){ result = "明治"+(n-1867); }else{ result = "計算不能"; } return result; }
引数として渡された西暦年をnとして、以下のテーブルにマッチした年号と和暦年を結合した文字列を返すというものです。
年号 | 元年の西暦 |
---|---|
平成 | 1989 |
昭和 | 1926 |
大正 | 1912 |
明治 | 1868 |
処理としては、if~else if~else文による簡単な分岐処理ですね。初心者がトライするのに良い題材です。
ちなみに、ドキュメンテーションコメントを入れることで、スプレッドシート上で概要を表示したり、補完対象にしたりすることもできるので、ぜひ積極的に入れておきましょう。
詳しくは以下の記事をどうぞ!
和暦変換を「令和」に対応する
この和暦変換のカスタム関数WAREKIを「令和」に対応させていきます。
前述のスクリプトについて、平成の前に「令和」かどうかの判定をする分岐処理を入れれば良さそうですね。
先ほどのテーブルについて令和を加えたバージョンに更新すると、以下のようになりますね。
年号 | 元年の西暦 |
---|---|
令和 | 2019 |
平成 | 1989 |
昭和 | 1926 |
大正 | 1912 |
明治 | 1868 |
2019年が令和1年、2020年が令和2年ですから、n年は令和(n – 2018)年になります。
なので、スプレッドシート関数WAREKIのスクリプトはこんな感じでよろしいかと。
/** * 西暦から和暦を返すカスタム関数 * * @param {Number} 西暦 * @return {String} 和暦 * @customfunction */ function WAREKI(n){ var result; if(n >= 2019){ result = "令和"+(n-2018); }else if(n >= 1989){ result = "平成"+(n-1988); }else if(n >= 1926){ result = "昭和"+(n-1925); }else if(n >= 1912){ result = "大正"+(n-1911); }else if(n >= 1868){ result = "明治"+(n-1867); }else{ result = "計算不能"; } return result; }
実際に、スプレッドシートで確認してみましょう。
A列が西暦年、B列に「=WAREKI(A2)」などの計算式が13行目まで入っております。
return文ですぐに戻り値を返す
そういえば、変数resultを使っていましたが、わざわざ変数を使わずとも、true判定になった瞬間に、すぐに該当の戻り値を返してもよかったですね。
ちょっとそのあたり修正しました。
/** * 西暦から和暦を返すカスタム関数 * * @param {Number} 西暦 * @return {String} 和暦 * @customfunction */ function WAREKI(n){ if(n >= 2019){ return "令和" + (n - 2018); }else if(n >= 1989){ return "平成" + (n - 1988); }else if(n >= 1926){ return "昭和" + (n - 1925); }else if(n >= 1912){ return "大正" + (n - 1911); }else if(n >= 1868){ return "明治" + (n - 1867); }else{ return "計算不能"; } }
ちょっとスッキリしました。
switch文を使った令和対応の和暦変換関数
あと、分岐が増えてきたので、if~else if~else文だと、ちょっと見づらい…
そんなときに、使いたくなるswitch文がありましたね。
switch文が多岐分岐をするときに使用する構文で、式と等しい値を値1,値2,…と順番に評価して、等しかったcase節以降の処理を実行するというものです。
case 値1:
//式が値1と等しかったときの処理
break;
case 値2:
//式が値2と等しかったときの処理
break;
…
default:
//式がすべての値と合致しなかったときの処理
}
break文が入っているのは理由があって、これを入れないと、ある値がマッチしてそのcase節を実行したら、それ以降に記述されているcase節すべてが実行されちゃうのです(鬼)。
ここは注意です。
なお、どの値もマッチしなかったときは、default節の処理が実行されます。
switch文を使った和暦変換のスクリプト
それで、switch文を使って和暦変換のスプレッドシート関数WAREKI2を作りました。
コチラです!
/** * 西暦から和暦を返すカスタム関数 * * @param {Number} 西暦 * @return {String} 和暦 * @customfunction */ function WAREKI2(n){ switch (true){ case n >= 2019: return "令和" + (n - 2018); case n >= 1989: return "平成" + (n - 1988); case n >= 1926: return "昭和" + (n - 1925); case n >= 1912: return "大正" + (n - 1911); case n >= 1868: return "明治" + (n - 1867); default: return "計算不能"; } }
switch文で条件式を判定したい場合は、「式」にtrueを直接放り込むというテクニックを使います。
case節の条件式の評価値がtrueになれば、そのcase節の処理が実行されるということになります。
これは結構便利なテクニックです。
「しかしおいおい…、あれほど注意しろと言ってたのに、break文を忘れてるじゃねーか」
と思いましたでしょ?
今回はbreak文なくても大丈夫です。
というのも、return文を実行すると、その関数の処理も終了するからです。
つまり、今回の場合でいうとWAREKI2自体の処理が終了します。
なので、以降の処理は実行されずに済みます。
では、実行結果を見てみましょう。
C列に「=WAREKI2(A1)」などとしています。
問題なさそうですね。
まとめ
以上、Google Apps Scriptで西暦を和暦に変換するスクリプト「令和」対応版をお送りしました。
加えて、if~else if~else文によるパターンとともに、switch文によるパターンも紹介しました。
同じ動作をする関数を作る場合でも、場合によって「良い書き方」が変わってきますので、常にそのあたりは考えながら進めていきたいところですね。
ということで、令和時代もGoogle Apps Scriptを精進していきましょう!