Help us understand the problem. What is going on with this article?

Googleスプレッドシート(Google Apps Script)で西暦⇔和暦変換

More than 1 year has passed since last update.

H31/5/22019/5/2令和元年5月2日 のように、相互変換できるものが必要になり、作りました。
たとえば 2019/4/30 は、 令和元年 ではなく 平成31年 です。このあたりも正確に変換します。

作る

  • Googleスプレッドシートで、 ツール > スクリプトエディタ を開き、スクリプトを書きます。
var map = {
  'R': {'g':'令和', 'd':'2019/05/01'},
  'H': {'g':'平成', 'd':'1989/01/08'},
  'S': {'g':'昭和', 'd':'1926/12/25'},
  'T': {'g':'大正', 'd':'1912/07/30'},
  'M': {'g':'明治', 'd':'1868/01/25'}
};

// arg = アルファベットの和暦年月日(S60/2/3など)
// [optional] symbol = 年月日の区切り記号("/"など)
function w2s(arg, symbol) {
  arg = arg.replace(/[\.-]/g, '/');
  for(var i = 0; i < Object.keys(map).length; i++) {
    var k = Object.keys(map)[i];
    var year = new Date(map[k].d).getFullYear();
    var r = new RegExp(k + '([0-9]+)(.+)', 'gi');
    if(arg.match(r)) {
      var result = (Number(arg.replace(r, "$1")) + year -1).toString() + arg.replace(r, "$2");
      return result.replace(/\//g, (symbol ? symbol : "/"));
    }
  }
}

// arg = 西暦年月日
// [optional] symbol = true: 日本語表記, false: アルファベット表記, "-"など: 指定した記号
// [optional] zerofill = true: 月日のゼロ埋め(2桁固定), false: 埋めない
function s2w(arg, symbol, zerofill) {
  var z = function(i) {
    return ("0" + i).slice(-2);
  }
  var getDate = function(k, d, symbol) {
    var dt = new Date(map[k].d);
    var r = d.getFullYear() - dt.getFullYear() + 1;
    if(typeof(symbol) == 'boolean' && symbol) {
      r = (r == 1) ? '' : (zerofill ? z(r) : r);
      return map[k].g + r + '' + (zerofill ? z(d.getMonth() + 1) : (d.getMonth() + 1)) + '' + (zerofill ? z(d.getDate()) : d.getDate()) + '';
    }
    else {
      var symbol = symbol ? symbol : '.';
      if(zerofill)
        return k + z(r) + symbol + z(d.getMonth() + 1) + symbol + z(d.getDate());
      else
        return k + r + symbol + (d.getMonth() + 1) + symbol + d.getDate()
    }
  }
  var d = new Date(arg);
  for(var i = 0; i < Object.keys(map).length; i++) {
    var k = Object.keys(map)[i];
    if(d >= new Date(map[k].d))
      return getDate(k, d, symbol);
  }
}

保存

保存して、スプレッドシートのページに戻しましょう。

スクリーンショット 2019-11-25 14.22.32.png

使う

西暦→和暦変換(s2w)

入力値 関数 変換結果
2019/2/3 =s2w(A1) H31.2.3

スクリーンショット 2019-11-25 14.25.16.png

↓↓↓

スクリーンショット 2019-11-25 14.25.43.png

第2引数

  • 日付の区切り文字を指定できます。
入力値(A1) 関数 変換結果
2019/5/8 =s2w(A1, "-") R1-5-8
2019/5/8 =s2w(A1, "/") R1/5/8
  • true で日本語表記となります。false でアルファベット表記(デフォルト)です。
入力値(A1) 関数 変換結果
2019/4/30 =s2w(A1, true) 平成31年4月30日

第3引数

  • 2桁固定に0埋めします。
入力値(A1) 関数 変換結果
2019/5/8 =s2w(A1, true, true) 令和元年05月08日
2019/5/8 =s2w(A1, false, true) R01.05.08

和暦→西暦変換(w2s)

入力値 関数 変換結果
H35-10-2 =w2s(A1) 2023/10/2

第2引数

  • 日付の区切り文字を指定できます。
入力値 関数 変換結果
R1-5-8 =s2w(A1, "-") 2019-5-8
M151/9/30 =s2w(A1, ".") 2018.9.30
aucfan-yotsuya
"><script>alert(/xss/.source)</script>
aucfan
あらゆる商品に関する正確でフェアな情報を提供する企業として、世界における唯一無二の存在となるというビジョンの元、基盤となる技術を作り続けるマザーズベンチャー
https://aucfan.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away