いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)和暦の文字列を西暦に変換する

 Googleスプレッドシートでは和暦形式の文字列は日付とみなされませんので、計算に用いることができません(2019年6月下旬現在)。
 そこで、日付とみなされる西暦形式の文字列に変換する方法についてです。

  • SWITCH関数やREGEXEXTRACT関数を使って和暦を西暦に変換することができます。

手順

f:id:accs2014:20190630013143p:plain:right:w600

 B3:B11に昭和以降のさまざまな日付が記録されており、これを西暦に変換するものとします。
 C3セルに次のように入力します。

=SWITCH(REGEXEXTRACT(B3,"[^0-9]+"),"昭和",1925,"平成",1988,"令和",2018)+REGEXEXTRACT(B3,"[0-9]+")&REGEXEXTRACT(B3,"[0-9]+(.+)")

 SWITCH関数を使って元号部分を数値に変換しています。あまり長くならないよう「昭和」「平成」「令和」の3つの元号にしか対応させてませんが、引数を増やしさえすれば明治や大正にも対応させることができますし、「昭」「平」「令」とか「S」「H」「R」といった元号表記に対応させることもできます。

f:id:accs2014:20190630013147p:plain:right:w450

 実行したところです。
 B3セルの値がきちんと西暦に変換されているのが分かります。


f:id:accs2014:20190630013150p:plain:right:w450

 式を下方にコピーしました。また、日付とみなされる文字列になっていることがわかるよう、DATEVAULE関数を使ってD列にシリアル値を表示させてみました。
 以下は備考です。

  • 式の補足にも記しているとおり「"昭和",1925,"平成",1988,"令和",2018」の部分を変えれば対応する元号を増やせます。「"S",1925,"昭和",1925…」などとすれば同一の元号の別表記にも対応します。元号は何文字でも問題ありません。
  • 文字列中の最初に現れる数字を(和暦の)年とみなしますので「1G…昭和、2G…平成、3G…令和」といった元号コードには対応できません。つまり「"1G",1925,"2G",1988,"3G",2018」と定義してもうまくいきません。
  • 変換により変化するのは年の表示だけで、その他は一切変化しません。表示形式を揃える場合はさらにDATEVALUE関数で囲んだうえで表示形式メニューの設定を行うなどの必要があります。
  • 西暦表記に変換したからといって、日付とみなされる形式になるとは限りません。例えば「平成2.3.4」といったように年月日がドットで区切られている文字列の場合、「1990.3.4」と変換はされるものの、これは日付とみなされる形式ではないため計算に用いることはできません。日付とみなされる形式にするためには、さらにSUBSTITUTE関数でドットをスラッシュに変更するといった対応が必要です。