いきなり答える備忘録

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

(Gスプレッドシート)関数を使って日付を和暦にする例

 Googleスプレッドシートは書式(表示形式)による和暦表示をサポートしていないので(2019年3月現在)、和暦表示を行う場合は関数で文字列を作らなければなりません。
  • 和暦表示するためには関数で文字列を生成する必要があります。

手順

 少々実験的になりますが、1つのセル内の式だけ(ただし長い)で明治以降の元号に対応する例を挙げてみます。

f:id:accs2014:20190413065124p:plain:w750

 B列に記録された日付に基づき、C列およびD列にて2種類の和暦表示をしています。元号は年ではなく日付で区別しています(例:1989/1/7は昭和、1989/1/8は平成)。ただし、シリアル値がマイナスになる1899年12月29日以前の日付はエラーになります。

 では具体的な式の内容です。
 まずC列です。C3セルに次のような式を入力し、下方にコピーしています。この列では元号がアルファベット1文字に省略されます。

=ARRAYFORMULA(HLOOKUP(B3,{{0,4595,9856,32516,43586};{"M","T","S","H","R"}&YEAR(B3)-{1867,1911,1925,1988,2018}},2))&TEXT(B3,"/m/d")

 {0,4595,9856,32516,43586}は、西暦1899年12月30日及び大正から令和の各元号の初日に対応するシリアル値です。要はHLOOKUP関数(第4引数は省略、従ってTRUEと同じ)を用いて元号を特定し、元号の略称と年の数値を決定しています。
 なお、ARRAYFORMULA関数を使っていますが、複数のセルを参照してもスピルしません。式を下方にコピーする必要があります。


 次にD列です。
 D3セルに次のような式を入力し、下方にコピーしています。この列では元号が漢字2文字となりスラッシュの代わりに年・月・日が表示されます。やっていることはC列と同じです。

=ARRAYFORMULA(HLOOKUP(B3,{{0,4595,9856,32516,43586};{"明治","大正","昭和","平成","令和"}&YEAR(B3)-{1867,1911,1925,1988,2018}},2))&TEXT(B3,"年m月d日")


 式は長いものの、限られた範囲で使う分にはいいかもしれません。
 ただし複数のシートにわたる場合など、広範囲に使用する場合はやはり元号等を別表にしておいてVLOOKUPで拾う方が扱いやすいと思います。