Google Apps Scriptで西暦を和暦に変換するスクリプト「令和」対応版


reiwa

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

新しい元号が「令和」に決まりましたね!

以前、こんな記事を書いておりました。

Google Apps Scriptで西暦を和暦変換するスプレッドシート関数を作る
Google Apps Scriptを使ってスプレッドシートの自作関数を作る方法です。今回は西暦から和暦を求める関数の作成方法。if~else if文、比較演算子、数値と文字列の演算なども含めてお伝えします。

西暦を和暦に変換する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文による簡単な分岐処理ですね。初心者がトライするのに良い題材です。

ちなみに、ドキュメンテーションコメントを入れることで、スプレッドシート上で概要を表示したり、補完対象にしたりすることもできるので、ぜひ積極的に入れておきましょう。

詳しくは以下の記事をどうぞ!

【初心者向けGAS】Google Apps Scriptのドキュメンテーションコメントの書き方
初心者向けGoogle Apps Script入門、名言Botを作るシリーズをお送りしています。あとで見返すとき、再利用するときなどに備えて、ドキュメンテーションコメントの書き方について解説をします。

和暦変換を「令和」に対応する

この和暦変換のカスタム関数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節以降の処理を実行するというものです。

switch (式) {
 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を精進していきましょう!

連載目次:Google Apps Scriptで自作スプレッドシート関数

本シリーズではGoogle Apps Script初心者向け、自作のスプレッドシート関数を作っていきます。一からとっても丁寧な解説を心がけておりますので、どうぞチャレンジしてみて下さい。
  1. 初心者でも簡単!Google Apps Scriptでスプレッドシートの自作関数を作る方法
  2. Google Apps Scriptで西暦を和暦変換するスプレッドシート関数を作る
  3. Google Apps ScriptでREST APIを使って郵便番号住所変換スプレッドシート関数を作る

タイトルとURLをコピーしました