• ベストアンサー

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」と入力された場合は、そのまま表示) ご教授のほど、よろしくお願いします。

  • gazo
  • お礼率30% (74/241)

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

  • ベストアンサー
  • 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/17068)
回答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に入力させた方がエラー対処がしやすいと思う 他の入力方法としてカレンダコントロールを使用するのが良いかも マウスで入力できるし、エラー処理も殆んどしなくてよいと思うよ

関連するQ&A

  • 日付入力 ExcelVBA

    UserFormの日付入力部分で年、月、日と分けています。 それぞれSpinBoxで選択する前に今日の日付を表示させたいです。 どなたか教えてくださいm(_ _)m

  • VBA Excelのyy/mmm/ddをUserFormに入力

    また、質問させていただきます。 今、UserFormが開くと【TextBox1】【TextBox2】【TextBox3】に現在の日付が入るようになっています。   【TextBox1】(年 08)   【TextBox2】(月 03)   【TextBox3】(日 03) UserFormには、【CommandButton1】(登録)と【CommandButton2】(呼び出し)があります。 【CommandButton1】(登録)をクリックするとExcelに '08/03/03と表示されます。 ある日、データを間違えて入力してしまい【CommandButton2】(呼び出し)をクリックし修正する時にExcelに登録している日を【TextBox1】(年 08)【TextBox2】(月 03)【TextBox3】(日 03)と自動的に入力することは出来るでしょうか? 宜しくお願いいたします。

  • TextBoxに連続で入力する方法

    Form1に、TextBox1とTextBox2を配置しています。 TextBox1にKey入力を受け、Enter Keyで取り込む動作を、連続して行うためのプログラムを作ってみましたが、何故かEnter Keyの後、カーソルがTextBox2に移動してしまいます。Enter Keyの後、TextBox1.SetFocusで、カーソルをTextBox1にしているのですが何故が解らず困っています。Enter Kyeの後、カーソルがTextBox1に戻るようにするには、どのようにすれば良いのか教えて下さい。 PC環境は、OS=Win10 Excel=2010 です。作ったプログラムは以下の通りです。よろしくお願いします。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyReturn Then Sheets("Sheet1").Range("A1") = TextBox1.Value TextBox1 = "" TextBox1.SetFocus End If End Sub

  • TextBoxに日付を自動的に入れる

    VBAについて教えて下さい! 今、UserFormに「TextBox1」,「TextBox2」,「TextBox3」,「CommandButton1」があります。 「TextBox1」には自動的に年"yy"(上書き修正も出来るようにする) 「TextBox2」には自動的に月"mm"(上書き修正も出来るようにする) 「TextBox3」には自動的に日"dd"(上書き修正も出来るようにする) が入るようにして 「CommandButton1」をクリックすることによりExcelの「A1」に"yy/mm/dd" と言う形で自動的に入力することは出来ないでしょうか? また、その時にありえない日にちが入力された時にエラーが出て、「TextBox3」にカーソルが戻るようなことは出来ないでしょうか?

  • UesrFormのTextBoxに入れた日付をExcelに入力

    教えてください。 VBAでUserFormを作成しています。 その中に「TextBox1」があり日付を入力させます。 入力は、半角でyy/mm/ddで入力させて「CommandButton1」をクリックさせたらExcelに反映させるのですが、どうしても、日付が違う値になるのです。 半角で入力した日付をyy/mm/ddでExcelに反映させ、さらに誤った日付(例:08/02/31など実際に無い日)を入れた場合、再入力をさせたいのですが良い方法はありますか?

  • excel vba についてお聞きします

    excel vba についてお聞きします userformを使ってworksheetにデータを登録するといった事をしたいと考えております userformにはtextboxとcommandbuttonを配置 commandbuttonを押したらtextboxに入力した内容をworksheetに登録させる 同時にworksheetのA列には日付を登録 日付は登録をするその日付を反映させる 同じ日付があった場合は日付の登録はせずにその日付の行、B→C→Dと順に textboxのデータの登録だけをする。 日付の入るA列以外にデータが入る事になります また、textboxの内容が既にworksheetに登録済の場合 『既に登録済みです』といったメッセージを出すようにもしたいのです ご教授の程、よろしくお願いします。

  • Excel VBA-改行について

    Excel VBAで、UserFormのTextBoxに入力されたものをワークシートに表示させたいのですが、 TextBox内で、「Enter」キーが押されたら改行する方法と TextBoxで入力された通り(改行等)にワークシートのセルに表示する方法を どなたか教えて下さい。

  • エクセルVBAで複数条件とデーターの重複チェック

    ユーザーフォーム(UserForm1)からSheets("データー")に転記しています 今現在はUserForm1のデーターを入力後「CommandButton2」でシートに書き込みしていますが、重複データーが出て来るので、「CommandButton2」を押した時に重複を防ぎたいのです データーはSheets("データー")の最終行に次々と転記していってます Sheets("データー")に見出し行あり Dim RowNum As Long '最終行 その中で[Me.textbox1]&[Me.textbox3]は必須項目したい .Cells(RowNum, 3).Value = Me.textbox1.Value  'メイン:必須項目 .Cells(RowNum, 4).Value = Me.textbox2.Value  'サブキー:空白でもOK .Cells(RowNum, 5).Value = Me.textbox3.Value  'キー:必須項目 やりたいこと ユーザーフォーム(UserForm1)のテキストボックス入力完了後「CommandButton2」でシートに書き込み時に重複チェック 【UserForm1上の空白チェック】 (1)Me.textbox1&Me.textbox2&Me.textbox3の空白チェック 条件 Me.textbox2は空白でもOK (2)Me.textbox1が空白の場合UserForm1に入力したデーターを保持したままtextbox1をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) (3)Me.textbox3が空白の場合UserForm1に入力したデーターを保持したままtextbox3をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) (4)Me.textbox2が空白の時はメッセージを表示「空白のままでいいですか?はい・いいえ」 (5)はいの時は処理を続行 (6)いいえの場合は場合UserForm1に入力したデーターを保持したままtextbox2をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) 【データーシートとの重複チェック】 (7)textbox3&Sheets("データー")の該当全セル列の重複チェック 条件1 textbox2が空白の時 Me.textbox1&&Me.textbox3とSheets("データー")メイン&キー該当全セル列との重複チェック (8)重複の場合はメッセージを表示「キーが重複しています!修正して下さい」OKボタンのみ (9)OKが押されるとUserForm1に入力したデーターを保持したままtextbox3をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) 条件2 textbox2にデーターがある場合Sheets("データー")のサブキー&キー該当全セル列との重複チェック (10)重複の場合はメッセージを表示「キーが重複しています!修正して下さい」OKボタンのみ (11)OKが押されるとUserForm1に入力したデーターを保持したままtextbox3をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) (12)重複が全てなくなったらSheets("データー")の最終行に書き込み (13)UserForm1をブランク状態で表示 以上よろしくお願い致します

  • エクセルVBA フォームの日付を指定

    データ登録フォームの日付を指定したいのですがどうすればよいでしょうか? まず、userform5を開きます。規定値は当日にしていますが、過去のものも入れられるようクリアして任意の日付を入力します。 その後、実行ボタンを押すとuserform2を開き、入力開始するのですが、その時の撮影日textboxの値にさきほど入力した値を入れたいです。 変数はPrivate torokudate As Dateこのような形でよいと思いましたが、どこに書けば他のフォームでも利用できるのでしょうか? うまくいってるのかどうかわかりませんが、表示が0:00とされました。 撮影日textboxのプロパティ設定がわるいのかどうかもよくわかりません。 初歩的なVBAですが、よろしくお願いします。

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

    こんにちは!エクセルでの日付入力について質問します。 私が入力している表に、日付を入力する場所があります。 (「場所」ではなく、「セル」と言った方が良いのかな?)今日の日付を例にとると、そのセルに2/5と入力して Enterキーを押すと、2月5日(水)と表示されるようになっています。画面上方の長い窓のような所には(よく、計算式などが表示になる所)2003/2/5と表示されます。ところが、今まで通り2/5と入力すると、2月5日としか表示されない部分が何箇所か見つかりました。長い窓には、2003/2/5とちゃんと表示されます。他と同じになるように設定したいのですが、どうやればいいのか分かりません。どうか教えてください!ソフトはエクセル2002です。

専門家に質問してみよう