こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2010において「元号(西暦)月日」

 昔、古いバージョンのExcelで作成したExcelファイルで、シリアル値を、

   元号○○年(西暦4桁年)○月○日[曜日]

という形式で表示する様に書式設定したセルがあり、そのセルに例えば

   1997/8/1

と入力しますと、本来は

   平成9年(1997年)8月1日[金]

と表示される筈だったのですが、そのExcelファイルをExcel2010で開いた処、

   1997年(1997年)8月1日[金]

と表示されてしまいます。
 過去の質問を検索しました処、類似した質問として、

 QNo.1493844 エクセルで和暦と西暦の表示形式を併用できますか。
  http://okwave.jp/qa/q1493844.html

を見つけましたが、Excel2010の場合、その質問に対して寄せられた回答の方法では、

   1997年(1997年)8月1日

と表示されてしまいます。
 私も何度か試行錯誤したのですが、どうにも上手く行きません。
 どなたかExcel2010の場合でも有効な

   平成9年(1997年)8月1日[金]

という形式で表示させる書式設定を御教え頂けないでしょうか?

 因みに、

   1997年(平成9年)8月1日[金]

という形式で表示させる事は[ユーザー定義]の

yyyy([$-411]ggge")年"m"月"d"日["aaa"]"

で出来たのですが、書類等では元号の方が重視されるため、元号を先に表示して、西暦の方を括弧内に入れたいのです。

投稿日時 - 2012-08-18 15:49:18

QNo.7650469

困ってます

質問者が選んだベストアンサー

手元にはExcel2007しかありませんが、2007では一応、次のとおり記入すれば、成功するようです。

"平成"[$-411]e"("yyyy")年"m"月"d"日"
あるいは
"平成"[$-411]e"年("yyyy"年)"m"月"d"日"

[$-411]を付けておいたほうが不具合が起こりにくいかどうかは、何とも言えません。西暦の不具合を避けるためには、ないほうがかえっていい可能性もあるかもしれません。申し訳ありませんが、ご自分で判断ください。

なお「昭和」の日付であっても「平成」と表示してしまうので、ご注意ください。また、和歴と西暦を組み合わせるか否かとは関係なく、「元年」が「1年」と、おかしな表示になってしまうので、その点にもご注意ください。

投稿日時 - 2012-08-18 17:37:20

補足

 補足欄にて失礼致します。
 御教え頂いた表示形式を基にさせて頂いて、「大正」、「昭和」、「平成」の3つの元号にのみ対応する表示形式を見つける事が出来ました。(明治の場合は大正と表示されてしまいますが)

[<9856]"大正"[$-411]e"年("yyyy"年)"m"月"d"日["aaa"]";[<32516]"昭和"[$-411]e"年("yyyy"年)"m"月"d"日["aaa"]";"平成"[$-411]e"年("yyyy"年)"m"月"d"日["aaa"]"

投稿日時 - 2012-08-19 02:18:26

お礼

 御回答頂き有難う御座います。

 成程! 元号を表示させるのではなく、"平成"という文字列を表示させるとは、コロンブスの卵的な発想に頭が下がる思いです。
 それにしても、[$-411]ggge"年("yyyy"年)"m"月"d"日"が駄目で、"平成"[$-411]e"年("yyyy"年)"m"月"d"日"が意図した通りに表示されるのは何故なのか不思議に思います。

>また、和歴と西暦を組み合わせるか否かとは関係なく、「元年」が「1年」と、おかしな表示になってしまうので、その点にもご注意ください。

 その点は、[$-411]ggge"年"m"月"d"日"であっても同様ですので、構わないのですが、

>なお「昭和」の日付であっても「平成」と表示してしまうので、ご注意ください。

の方は多少引っ掛かりを覚えます。
 今回の作成する書類に関しては、幸いな事に平成に入ってからの日付しか入力しませんので、MarcoRossiItaly様の方法でも構わないのですが、その内、昭和の日付を入力しなければならない場面も出て来ると思われますので、何とかしたい処です。

投稿日時 - 2012-08-19 00:22:58

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(9)

ANo.9

IsDateだけでは余計なものも変換してしまいますので、
以下に差し替えてください。
数字とスラッシュだけを対象に加えました。
今までの例、
1.2.3 → 明治32年(1899年)12月30日[土]
1-2-3 →平成13年(2001年)2月3日[土]
1-2 →平成24年(2012年)1月2日[月]

Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  
  If IsDate(Target.Value) And Not Target.Value Like "*[!/-9]*" Then
    Target.Value = Format(Target.Value, "ggge\年(yyyy\年)m\月d\日\[aaa\]")
  End If
  
  Application.EnableEvents = True
End Sub

投稿日時 - 2012-08-19 20:58:19

お礼

 御礼が遅れてしまい、申し訳御座いません。
 三度の御回答有難う御座います。

 更に使い易くなるよう工夫して頂き感謝致します。

投稿日時 - 2012-08-22 03:53:22

ANo.8

別の列を用意できないというのであればマクロで対応することになるでしょう。
例えばA列に日付が入力されているとします。
セルには1997/8/1のように入力されているとします。仮に表示形式で平成9年のように表示されている場合には反応しませんので注意が必要です。
例えばシート見出しで該当のシート名を右クリックして「コードの表示」を選択します。
表示の画面には次のコードを入力します。

Sub 日付表示変更()
i = 0
Do
i = i + 1
If IsDate(Cells(i, 1).Value) Then
myDate = Cells(i, 1)
If Year(myDate) >= 1926 And Year(myDate) <= 1988 Then
myYear = "昭和" & Year(myDate) - 1925 & "年"
ElseIf Year(myDate) >= 1989 Then
myYear = "平成" & Year(myDate) - 1988 & "年"
End If
myWeekday = Weekday(Date:=myDate)
myWeek = WeekdayName(Weekday:=myWeekday, abbreviate:=True)
Cells(i, 1).Value = myYear & " (" & Year(myDate) & "年) " & Month(myDate) & "月" & Day(myDate) & "日[" & myWeek & "]"
End If
Loop Until Cells(i, 1) = ""
End Sub

マクロを実行するためには「開発」タブの「マクロ」をクリックし、該当のマクロを選択して「実行」をクリックします。
A列に入力された日付のデータがお望みのような表示に変わります。

投稿日時 - 2012-08-19 11:08:08

お礼

 御回答頂き有難う御座います。

 御教え頂いた方法を試してみましたが、「マクロ」ダイアログボックスの[実行]ボタンをクリックしましても、何故かA列に入力した日付データとその表示には変化が御座いませんでした。
 尚、Visual Basicや、「マクロ」ダイアログボックスの[編集]で、マクロの内容を確認致しましたが、正常に記録されている様です。
 マクロは御回答文をコピー&ペーストしたものですので、私の打ち間違いとも思えず、試しに、御回答文のマクロ部分と、記録されているマクロのそれぞれを、Excelの2つのセルにコピー&ペーストし、その2つのセルの値が等しいかどうかをExcelに判定させてみましたが、結果はTRUEでした。

投稿日時 - 2012-08-19 15:51:13

ANo.7

色々経緯があって現状ではできないらしい?ので、
日付がA1セルにあるとして、無理やり合成する!

=TEXT(A1,"ggge""年(""")&TEXT(A1,"yyyy""年)""m""月""d""日[""aaa""]""")

==============================
2007年08月16日(木) 16時29分
「元号の後に西暦を表示できない-ggge"年("[$-1033]yyyy"年)"」
http://www.relief.jp/itnote/archives/002748.php
「ggge"年("yyyy"年)"」と指定すれば「平成19年(2007年)」と表示されそうなものですが、Excel 2002・2003・2007では、「平成19年(19年)」と表示されてしまいます。
これはOffice XPから多言語対応したことによる仕様のようです。元号を表示するための書式記号「ggg」が指定されていることで、そのセル内では日本の日付表示を行うという認識が行われ、続く「yyyy」に和暦年が表示されてしまうのです。ちなみに、
Excel 97・2000では「ggge"年("yyyy"年)"」と指定すれば、「平成19年(2007年)」と表示されますが、
Excel 2002以降のバージョンでは書式設定に工夫が必要です。
[種類]欄に「ggge"年("[$-1033]yyyy"年)"」と入力
ポイントは「[$-1033]」です。
ロケールIDを指定することで正しく表示されるようになるのです。「1033」というのは、言語コード:en-us・ロケール名:英語(U.S.)を意味する10進表記のロケールIDです。「[$-1033]」が指定されることで、それに続く「yyyy」が、英語(U.S.)圏の年表示をするという認識が行われるわけです。

※このネタを公開した2007年8月16日時点では、Excel 2007でも「ggge"年("[$-1033]yyyy"年)"」の設定で、和暦の後に西暦を表示できていたように記憶しているのですが、2007 Microsoft Office system Service Pack 1 (SP1)適用後は、「ggge"年("[$-1033]yyyy"年)"」を指定しても「2008年(2008年)」という表示になってしまうことがあるようです。(2008年6月26日追記)

投稿日時 - 2012-08-19 10:39:53

お礼

 御回答頂き有難う御座います。

>色々経緯があって現状ではできないらしい?

 そうだったのですか、残念です。
 おそらく同じ表示形式を望んでいるユーザーも多いのではないかと思われますので、Microsoft社様には早目に対応策を見つけて貰い、対応するパッチを配布して頂きたい処です。

投稿日時 - 2012-08-19 15:18:16

ANo.6

自己解決されたようなのですが一応前回の説明を。
そこではなくて、VBEに記述します。
Alt+F11 キーか、リボンの開発タブのVisual Basicを押します。
画面がVBEに切り替わります。
プロジェクトウィンドウの Sheet1(Sheet1) をダブルクリックします。
  プロジェクトウィンドウが出てなければ
  Ctrl+R または表示→プロジェクトエクスプローラで。
コードウィンドウが現れます。
そこのGeneral▽ となっているプルダウンメニューからWorkSheetを選択。
  Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  End Sub
  がポコッと現れます。

この・・Worksheet_SelectionChange・・を・・Worksheet_Change・・に書き換えます。
  またはSelectionChange▽になっているプルダウンメニューから
  Changeを選択します。
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    End Sub
  は不要なので消します。
  残っている
    Private Sub Worksheet_Change(ByVal Target As Range)

    End Sub
の間に先ほどの回答の中身をコピペします

結果は
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If IsDate(Target.Value) Then
Target.Value = Format(Target.Value, "ggge\年(yyyy\年)m\月d\日\[aaa\]")
End If
Application.EnableEvents = True
End Sub
になります。
メニューのデバッグ→VBAProjectのコンパイルをクリックしエラーが出ないのを確認。
Alt+F11でExcelの画面に戻ります。

このコードはSheet1に変更があった時に発生しますので
Sheet1上で任意のセルで日付を入力します(8/19とか・・)
日付が、平成24年(2012年)8月19日[日] に替わります。
最後にファイルをxlsm形式で保存します。

ここまで読み進んでもらって今更言えない事なのですが
データは日付型からテキスト型に変更されていますので計算には使えません。
また日付と判断される場合(IsDate)は全て変更されます。
月日だけを表示したいセルが他に有ったりする場合は、
If ~ End Ifの部分を修正する必要が有ります。
あとは書籍などで・・・。

投稿日時 - 2012-08-19 09:36:03

お礼

 丁寧に御説明頂き感謝致します。

 御教え頂いた方法で、無事、変換する事が出来ました。
 入力した値がシリアル値ではなく、文字列になってしまう事が難点ですが、今回の書類のみに関してはシリアル値ではなくとも、必ずしも問題にはならないと思います。

 御教え頂き、有難う御座いました。

投稿日時 - 2012-08-19 15:07:34

ANo.5

ggge"年("[$-1033]yyyy"年)"m"月"d"日"

投稿日時 - 2012-08-19 09:14:55

お礼

 御回答頂き有難う御座います。

 折角御回答頂いた処、申し訳御座いませんが、御教え頂いた表示形式は、質問文中で上手く行かなかった事を述べております「QNo.1493844 エクセルで和暦と西暦の表示形式を併用できますか。」に対して寄せられた回答の方法と同じものです。

投稿日時 - 2012-08-19 15:57:10

ANo.4

なかなか言うことを聞いてくれませんね。
英語ロケールの[$-409]と組み合わせれば・・と考えましたが惨敗。

早々と妥協案です (^^ゞ
ワークシートの
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If IsDate(Target.Value) Then
Target.Value = Format(Target.Value, "ggge\年(yyyy\年)m\月d\日\[aaa\]")
End If
Application.EnableEvents = True
End Sub
ではダメですかね。

投稿日時 - 2012-08-18 20:49:04

お礼

 御回答頂き有難う御座います。

 折角御回答頂いた処、申し訳御座いませんが、御教え頂いたマクロをコピーして、「マクロの記録」ダイアログボックスの「説明」欄に貼り付けてから、[OK}ボタンをクリックし、「コード」グループのマクロボタンをクリックすると現れる、「マクロの記録」ダイアログボックスの[実行]ボタンをクリックしてみましたが、何故か日付表示に変化が御座いませんでした。

投稿日時 - 2012-08-19 01:48:44

ANo.3

表示形式で対応することはできないでしょう。
A1セルに日付のデータが1997/8/1のように有るとしてらB1セルに次の式を入力してはどうでしょう。

=TEXT(A1,"ggge年")&TEXT(A1,"(yyyy年) m月d日")&SUBSTITUTE(SUBSTITUTE(TEXT(A1,"(aaa)"),"(","["),")","]")

(金)のように表示することは容易なのですが[金]は工夫が必要ですね。

投稿日時 - 2012-08-18 19:59:23

お礼

 御回答頂き有難う御座います。

 折角御回答頂いた処、申し訳御座いませんが、日付を入力する欄は、数行を挟んで飛び飛びの行に存在していて、間に挟まる行数は、入力する文章の量によって変わって来るというもので、行の挿入や行の削除が行われる場合の方が多いため、他のセルに元データを入力する方法では、入力するセルを間違える恐れが高くなるかと思われましたので、今回は関数による方法は避けたいと考えております。

投稿日時 - 2012-08-19 00:39:25

ANo.1

ggge"年("yyyy"年)"m"月"d"日"で表示されるのでは

投稿日時 - 2012-08-18 17:04:45

お礼

 御回答頂き有難う御座います。

 その設定は、質問投稿前に既に試みていたのですが、

平成9年(9年)8月1日[金]

と表示されるだけでした。

投稿日時 - 2012-08-18 17:39:44

あなたにオススメの質問