• ベストアンサー

エクセルで日付入力について

エクセル2002を使用しているのですが、4桁の数字を入力するだけで2006年11月23日(木)と表示する方法をどなたか教えてください。 例えば1231と入力してエンター押したら 2006年12月31日(日) みたいな感じです。 よろしくお願い致します。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

方法その1 A1に1231と入力したらB1に2006年11月23日(木)と表示する(別セルでいい場合) B1の表示形式を yyyy"年"m"月"d"日"(aaa) としておき、B1に =VALUE(LEFT(A1,2)&"/"&RIGHT(A1,2)) という式を入れる。 方法その2 1と同じく、A1に1231と入力したらB1に2006年11月23日(木)と表示する(別セルでいい場合) B1に以下の式を入れる。 =YEAR(TODAY())&"年"&LEFT(A1,2)&"月"&RIGHT(A1,2)&"日" 方法その3 A1に1231と入力したらそのセルに2006年11月23日(木)と表示する。 Alft+F11でVBAの画面を立ち上げて、左の画面から日付を入力するシートをダブルクリックして、右の画面に以下のマクロを貼り付ける。 その際、3行目の1という数値は日付が入る列番号に置きかえる。 Private Sub Worksheet_Change(ByVal Target As Range)   Dim DateStr As String   If Target.Column <> 1 Then 'A列なら1、B列なら2...     Exit Sub   End If   DateStr = Target.Value   If Len(Target.Value) <> 4 Then     MsgBox "日付を4桁で入力してください", vbExclamation, "入力エラー"     Exit Sub   End If        Target.Value = Format(Left(DateStr, 2) & "/" & Right(DateStr, 2), "yyyy年m月d日(aaa)") End Sub

noname#186192
質問者

お礼

出来ました! ご丁寧にありがとうございました

noname#186192
質問者

補足

ham_kamo様 ご丁寧にありがとうございます 僕の希望としてはその3のそのセルに打ち込んでやる方法をしたかったのでマクロの方法をとる事にしました。 マクロの作成法なんですが、 自分が作成しているシートの日付の場所がB2なんですが、 その場合のマクロの文は Private Sub Worksheet_Change(ByVal Target As Range)   Dim DateStr As String   If Target.Column <> 2 Then     Exit Sub   End If   DateStr = Target.Value   If Len(Target.Value) <> 4 Then     MsgBox "2006", bExclamation, "入力エラー"     Exit Sub   End If        Target.Value = Format(Left(DateStr, 2) & "/" & Right(DateStr, 2), "yyyy年m月d日(aaa)") End Sub でよろしいでしょうか? 度々すいませんがご教授よろしくお願い致します。

その他の回答 (4)

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.5

1231では無理かもしれませんが 12/31では出来ますね これでは駄目ですか? ただ何年に認識されるかが入力値と設定で千差万別になる可能性がありますが… やり方ですが セルの書式設定をお好みの書式に変えてから (この場合だとyyyy"年"m"月"d"日"(aaa)ですね) 12/31と入力してみてください お求め通りの2006年12月31日(日)という表記に変わると思いますよ 如何でしょうか? これで事足りましたでしょうか?

noname#186192
質問者

お礼

はい おっしゃるとおりでした 私が希望していた方法でした ありがとうございました

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

エクセルの関数は入力した値を受け取って、処理して、入力したセルの値としてセットできません VBAならできます。 したがって入力はA1セル、望みのデータはB1セルのようにならざるを得ません。 B1に入れる式ですが =DATE(2006,LEFT(A1,2),RIGHT(A1,2)) です。DATE関数は第1、第2、第3引数は数ですが、文字列でも良いようです。DATEVALUE関数も使えます。 ただ2007年のなると第1引数を変えないといけませんので、不便ですが、楽をする以上この点は致し方ない。 VBAでは、A列に1123、304など入れるとして、A列を日付書式にしておくこと。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Application.EnableEvents = False d = Target.Value Target = DateSerial(2006, Int(d / 100), d Mod 100) Application.EnableEvents = True End If End Sub エラーが起こると Sub test01() Application.EnableEvents = True End Sub を実行して、やり直し。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

No.1です。 はい、B列の場合は2に変更であってます。 あと、メッセージを修正したときに誤って削ったのかもしれませんが、 MsgBox "2006", bExclamation, "入力エラー" の bExclamation は vbExclamation なので、念のため。(!マークを出すという意味です)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

No.1です。すみません、先ほどの回答、全て 2006年11月23日(木) は 2006年12月31日(日) の誤りです。

関連するQ&A