事象
Excel VBAで日付を和暦の文字列に変換するためにWorksheetFunction.Textメソッドで第2引数に"ggge年m月d日"と指定したところ、特定の環境では西暦で返ってきた。
Debug.Print WorksheetFunction.Text(Now(), "ggge年m月d日")
"令和5年7月12日"(実行日)と出力されることを期待しているが、"2023年7月12日" と出力された。
原因
Officeの編集言語が日本語以外の言語になっていた。
対応方法1
Officeの編集言語を日本語にする。和暦を扱うんだから日本語使えの精神。
[ファイル]-[オプション]で Excelのオプション(下記)を表示し、[Officeの編集言語と校正機能]で[日本語]を選択して、[優先として設定(P)]で変更します。
対応方法2
対応方法1ができない場合、プログラム的に対処することもできます。
WorksheetFunction.Textメソッドで第2引数にロケールIDを含めて書式を指定します。
Debug.Print WorksheetFunction.Text(Now(), "[$-411]ggge年m月d日")
以上です。
Excelの和暦変換について説明しているサイトは初心者向けやそこそこ中級者向けっぽいサイトなどで山のようにありますが、上記の事象についての説明があるサイトは見つけられず、原因の特定にかなり時間がかかりましたのでここに残しておきます。
最後に蛇足ですが、Format関数ではこの問題はおきないようです。なんでや。