• ベストアンサー

ExcelVBAでの日付入力について

UserFormにTextBoxがTextBox1からTextBox10の10個あり、すべて日付を入力します。 たとえば「12/10」と入力し、EnterもしくはTabキーなどで他のTextBoxにカーソルを移動させると 「2008/12/15」と前に年を表示させたいと思っています。 もし、日付ではないものを入力された場合は、エラーメッセージを表示したいと思っています。 日付入力はTextBox1から順に入力していくのですが、いつも10個すべてのTextBoxが入力される わけではありません。(TextBox1~TextBox3のみ入力などがあります。) どのようにしたら日付データ「12/10」と入力したら自動的に「2008/12/10」と年を追加させる ことができ、日付データではない場合はエラー表示することができるのでしょうか。 (「2008/12/10」と入力された場合は、そのまま表示) ご教授のほど、よろしくお願いします。

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

  • ベストアンサー
  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.4

こんな感じでいいんじゃないかな #2さんのと被ってるけど^^; Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)   Dim tmp As String   Cancel = validateDateString(Me.TextBox1.Text, tmp)   Me.TextBox1.Text = tmp End Sub Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)   Dim tmp As String   Cancel = validateDateString(Me.TextBox2.Text, tmp)   Me.TextBox2.Text = tmp End Sub Private Function validateDateString(dateString As String, ByRef resultString As String) As Boolean   validateDateString = False   dateString = Trim(dateString)   If Len(dateString) = 0 Then     resultString = vbNullString   ElseIf IsDate(dateString) Then     resultString = Format(CDate(dateString), "yyyy/mm/dd")   Else     MsgBox "日付を入力してください", vbExclamation     resultString = dateString     validateDateString = True   End If End Function

その他の回答 (3)

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

日付チェックを始めるきっかけは、何を使うか、はっきり認識すべきです。 (1)入力完了済みの意志のコマンドボタンのクリック (2)テキストボックスのイベント など ーー 12/10を2808/12/10と解するのはたやすいが、実際には危険を伴う。2009年になったらどうする。 ・操作時の年 ・毎年初プログラムを手直し なども有ると思うが、やはり年は1箇所か、全テキストボックスに入れるべきではないかな。10個とも日付年がそろうものかな。 ーー 日付として、日付シリアル値数的・カレンダー的に有効かどうかはIsDate関数が有る Sub test01() If IsDate(Cells(1, "A")) = True Then MsgBox "日付OK" Else MsgBox "日付NO" End If End Sub 0,13月、33日などチェックしてくれる。 ーーー Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) t = "2008/" & UserForm1.TextBox1.Text If IsDate(t) = True Then MsgBox "日付1 OK" Else MsgBox "日付1 NO" End If End Sub ーーーーー これは1つのテキストボックス対応だけだが、VBAでは、とりあえずは各テキストに対応した10個似たものを並べてください。 将来1つのルーチンで済ます方法を勉強してください。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

日付かどうかをチェックし、日付なら編集後の文字列を返し、 日付として不正ならエラーメッセージを表示して、空文字列を 返す関数の例 Function 日付検査(ByVal 文字列 As String) As String   If Trim(文字列) = "" Then Exit Function '空文字列は許可   If IsDate(文字列) Then     日付検査 = Format(CDate(文字列), "YYYY/MM/DD")   Else     MsgBox "日付として不正です", vbCritical, "日付エラー"   End If End Function

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim a As Date If TextBox1.Text = "" Then Exit Sub On Error GoTo ErrorHandler a = TextBox1.Text If a < #1/1/2000# Then GoTo ErrorHandler TextBox1.Text = a Exit Sub ErrorHandler: TextBox1.Text = "" MsgBox "error" Cancel = True End Sub 完全ではないので、参考までに 特に日付関係はムズイ もっと条件を絞らないとエラーの回避は出来ないと思う 月と日を分けて別々のtextboxに入力させた方がエラー対処がしやすいと思う 他の入力方法としてカレンダコントロールを使用するのが良いかも マウスで入力できるし、エラー処理も殆んどしなくてよいと思うよ