この投稿では、Google Spreadsheetで、西暦の日付を和暦の年に変換する関数を紹介します。
Google Spreadsheetには和暦を表示する書式がない
Google Spreadsheetは「2022/08/04」のような日付を入力すると、日付フォーマットとしてあつかうことができます。しかし、対応しているフォーマットは西暦だけです。令和のような和暦を表示するフォーマットがありません。
Google Spreadsheetビルトインの日付関係の関数でも、和暦に変換するような関数がありません。
意外とめんどくさい和暦
Google Spreadsheetで、西暦の日付から和暦に変換するには、式を編む方法もあります。
しかし、西暦の年数と和暦の年数は必ずしも一致しないので、式でやってしまうと複雑化するのが問題になります。たとえば、令和元年は2019年5月1日からです。2019年は平成31年と令和元年、どちらの可能性もあるわけです。また、平成元年や令和元年のような1年目を元年とする場合も、分岐が必要になります。こうした分岐処理を式で表現するのは、結構面倒です。
和暦に変換するカスタム関数をGoogle Apps Scriptで自作する
そこで、細かい規則を一切気にしないでやる方法に、JavaScriptのビルトインライブラリDateTimeFormatを使う方法があります。
これを用いると、「令和元年」や「平成31年」といった年数を簡単に求めることができます。
DateTimeFormatを使ったカスタム関数の実装は次のようになります。
const warekiFormat = new Intl.DateTimeFormat("ja-JP-u-ca-japanese", {
era: "long",
year: "numeric",
});
/**
* 日付から和暦の年を返す
* @param {number|Date} date - 日付
* @return {string} 和暦の年の文字列
* @customfunction
*/
function WAREKI(date) {
let dateObject;
if (typeof date === "number") {
dateObject = new Date(date, 0, 1);
} else if (date instanceof Date) {
dateObject = date;
} else {
throw new Error("Invalid date " + typeof date);
}
return warekiFormat.format(dateObject);
}
このコードを見てのとおり、日付による細かい分岐を自分で書く必要はありません。
WAREKI関数の使い方
上で宣言したWAREKI
関数がGoogle Spreadsheetで利用できます。
日付の値に対してWAREKI
関数を使うと、
次のように和暦の年が求められます。
また、西暦の数値に対して、WAREKI
関数を使った場合、
次のように与えられた西暦の1月1日の時点の和暦の年が求められます。