日付型のテキストボックスに数値を入れて日付にする方法

このQ&Aのポイント
  • テキストボックスに入力された数値を日付型に変換する方法について教えてください。
  • テキストボックスに対して更新前処理イベントを設定して日付の形式をチェックし、自動的に日付型に変換することができます。
  • 入力された値が日付の形式ではない場合にはエラーメッセージを表示することで、正しい形式の入力を促すことができます。
回答を見る
  • ベストアンサー

日付型のテキストボックスに数値を入れて日付にしたい

アクセスのフォームの上にテキストボックスがあり、 書式はyyyy/mm/dd(aaa)になっています。 日付型の値を入力した際は問題ないのですが 例えば、20130720と入力したら、 このフィールドに入力した値が正しくありません。 例えば、数値型のフィールドに文字列を入力しました。 となります。 なので、 Private Sub 日付_BeforeUpdate(Cancel As Integer) If Len(Me.ActiveControl.Value) = 8 Then Me.ActiveControl.Value = Format(Me.ActiveControl.Value, "yyyy/mm/dd") End If End Sub としてみたのですが、 更新前処理イベントが発動する前に、 「このフィールドに入力した値が正しくありません。 例えば、数値型のフィールドに文字列を入力しました。」 のエラーが出てしまうようです。 20130720の形の日付を入れても自動で日付型に変換するの方法はありますか?

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

>更新前処理イベントが発動する前に、 このAccess君のチェックをかい潜るすべは知りません。 コントロールのデータタブ→定型入力に、0000/00/00;0;_ 書式が自動的に変わってしまうので再度、yyyy/mm/dd(aaa) にもどす。 で近いことは出来ます。 参考になりそうなところ http://hatenachips.blog34.fc2.com/blog-entry-304.html?cat-2 もしくは、更新前処理ではなく変更時イベントで Private Sub 日付_Change() If Len(Me.ActiveControl.Text) = 8 And IsDate(Format(Me.ActiveControl.Text, "0000/00/00")) Then Me.ActiveControl.Value = CDate(Format(Me.ActiveControl.Text, "0000/00/00")) End If End Sub とかでも?

qecztuotdtj
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • VBA 特定セル変更時に指定セルに日付代入方法

    初心者のため、伝わるかわかりませんが、 次のような動作をVBAで行えなくて困っています。 ・行いたい事 (※前提として"行"ごとに実行します) J列が"1"だった場合、 L列にJ列が"1"になった日付(yyyy/mm/dd)を入力する ただし、J列には関数を使用し"1"と表示されているため セルの値変更ではありません。 ・現在のVBA Private Sub Worksheet_Calculate() If Target.Row >= 1 And Target.Row <= 100 And Target.Column = 10 Then With Target.Offset(, 2) .Value = Now() .NumberFormatLocal = "yyyy/mm/dd" End With End If End Sub ※J列が関数を使用しているため、Calculateにしています。 2行目の↓の部分でエラーになってしまっています。 > If Target.Row >= 1 And Target.Row <= 100 And Target.Column = 10 Then どなたかご教授いただけたら助かります。 よろしくお願いします。

  • エクセル シート上のTextBox(日付)

    今まではForm上にTextBoxを貼り、スピンボタンにて日付を変化させるのは できるのですが、これをシート上で日付を動かすと どのような記述の変化が必要なのでしょうか? TextBoxはhidukeという名でしています!日付は出るのですが スピンボタンは動きません! すいません教えて下さい! Private Sub SpinButton1_SpinDown() Me.hiduke.Value = DateAdd("d", -1, Me.hiduke.Value) End Sub Private Sub SpinButton1_SpinUp() Me.hiduke.Value = DateAdd("d", 1, Me.hiduke.Value) End Sub Private Sub hiduke_Change() Me.hiduke.Value = Format(Now(), "yyyy/mm/dd") End Sub

  • VBA テキストボックスで日付を変更するとエラー

    VBAにて、ユーザーフォーム上のテキストボックスに初期値として今日の日付が入力されており、さらにそれを任意で変更するというマクロを作成しようとしています。 'テキストボックス2に初期値として今日の日付を入力 Private Sub UserForm_Initialize() TextBox2.Text = Format$(Date, "yyyy/mm/dd") End Sub 'テキストボックス2に入力された日付はdenpyoudateという変数に格納される Private Sub TextBox2_Change() denpyoudate = UserForm2.TextBox2.Value End Sub 入力された日付を変数として利用したいので、上記のようなコードにしたのですが、実際に初期値である今日の日付を編集すると「型が一致しません」というエラーが出てしまいます。 このエラーを回避し、テキストボックスに入力された日付を変数として使用するにはどうすればよいでしょうか?

  • エクセル シート上TextBox(日付)

    Sheet上にTextBox=”hiduke”とする このBookを開いた時に 現在に日付にしたいのですが どのようにしたら良いのでしょうか? Private Sub Worksheet_Activate() ならSheetをアクティブにしたら現在の日付に なるのですが・・Bookを開いた時に 現在の日付にしたいです。 すいません教えて下さい。 Private Sub Workbook_Open() Me.hiduke.Value = Format(Now(), "yyyy/mm/dd") End Sub

  • 入力された日付の正規表現の仕方を教えて下さい。

    こんばんは、いつもお世話になっております。 過去ログをあさってみたのですが、探し方が悪いのか 見つけられず…。 どうかご指導よろしくお願い申し上げます。 フォームに入力された値のチェックを、CGIに渡す前に ジャバスクリプトでもチェックしたいと思っています。 未入力や半角英数字以外のエラーチェックは出来たのですが yyyy/mm/dd形式で日付の入力をして欲しい時の チェックの書き方がわかりません。 私なりに色々と調べてみて、 if(myForm.day.value.match(/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/)){ alert("日付は半角でyyyy/mm/dd形式でご記入下さい"); return false; } と記述してみたのですが、9999/99/99のような、ありえない 日付でも通ってしまいます。 そればらば、とおもい if(myForm.day.value.match(/^[2-3][0-9][0-9][0-9]\/[0-1][0-9]\/[0-3][0-9]$/)){ alert("日付は半角でyyyy/mm/dd形式でご記入下さい"); return false; } と書いてみたのですが、こちらはエラーが出ました(泣) どうか、ご指導よろしくお願い申し上げます。

  • クリスタルレポートの式フィールドで日付変換。

    クリスタルレポート8の式フィールドで日付を表示させようと思っています。 標準では『YYYY/MM/DD』形式なのですがこれを『YYYY-MM-DD』で表示させたいのですがうまくいきません。 式フィールドには if A ="1" then formula = CurrentDate と記述しています。 Aの値が"1"ならば日付を表示です。 説明が下手で分かりづらいかもしれませんが、 補足しますのでヨロシクお願いします。

  • VBA publicで日付が呼び出せない

    VBAにて、ユーザーフォーム上のテキストボックスに初期値として今日の日付が入力されており、さらにそれを任意で変更することも出来、最終的なテキストボックスの値を変数に格納するというマクロを作成しようとしています。 'テキストボックス2の初期値を今日の日付とする Private Sub UserForm_Initialize() TextBox2.Text = Format$(Date, "yyyy/mm/dd") 'テキストボックス2の値が日付かどうかチェック Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If IsDate(TextBox2.Value) Then DenpyouDate = TextBox2.Value Else TextBox2.Value = "" MsgBox ("日付が不正です") TextBox2.Text = Format$(Date, "yyyy/mm/dd") End If End Sub '他のモジュールでdenpyoudateを使用し、指定のセルに和暦形式で入力する Public DenpyouDate As Date Sheets("伝票").Range("A10").Value = Format(DenpyouDate, "e") Sheets("伝票").Range("C10").Value = Format(DenpyouDate, "m") 「ユーザーフォームのテキストボックスに初期値として日付を表示させ、その最終的な値を変数として格納、別のモジュールで呼び出してセルにセットする」というイメージです。 このマクロを実行した際、初期値である今日の日付を任意の日付に変更した場合は、問題なくそのままの値がセルにセットされるのですが、初期値のまま実行すると、その数値が反映されません。 ローカルウィンドウをチェックすると、ユーザーフォームの時点では、テキストボックスの初期値がきちんとdenpyoudateに格納されているのですが(例:2009/11/24)、それを別モジュールで呼び出した時は、denpyoudateの値が(#0:00:00#)になっており、これが原因だと考えています。 このエラーを回避し、初期値の場合でも値がきちんとセルにセットされるようにするには、どうしたらよいでしょうか?

  • Excel VBA テキストボックスに当日の日付

    Excel 2013において、VBAで入力フォームを作成中の初心者です。 入力フォームの中に日付の項目があり、テキストボックスに手入力しています。 そのテキストボックスに当日の日付を自動で表示させたく、ネットで調べ試しましたが、うまくいきません。 やりたいこととしては、テキストボックスに今日の日付を自動的に和暦で表示させ、その日付を変更する場合には、「2016-12-03」などと入力後、和暦に自動的に変換して表示させたいのです。 手入力において、「2016-12-03」と入力後、自動的に和暦に変換するコードはネットで見つけることができ、うまくいったのですが、当日の日付を自動的に表示させる方法がわからずにおります。 日付を手入力後、和暦で表示させるコードは以下のようにしてあります。 Private Sub textbox1_AfterUpdate() With Me.textbox1 If IsDate(.Value) Then .Value = Format(.Value, "ggge年m月d日") End If End With End Sub どなたか、教えていただけると助かります。 よろしくお願いいたします。

  • Excel VBA で日付を4ケタの数値に変換させるには?

    ある日付データを 『月』と『日付』のみの4ケタの"文字列"にさせて表示処理させたいのですが、困っております。 現在、VBAを使用しないで処理させると…こんな感じで困っています。 1.日付を yyyy/mm/dd 表示 2.編集~ 『/』のみを全て『0』に変換 3.RIGHT関数で4ケタ(または5ケタ)抜き取る *データ* 日付    yyyy/mm/dd  変換      RIGHT(4ケタ) 1月5日  2005/1/5     20050105   0105 1月10日  2005/1/10    200501010   0110  ・    ・  ・    ・ ▲不具合状況 1."1月10日" のように日付が2ケタになる日は "1010" のように表示がずれる。RIGHT(○,5) で対処する方法もあるが…効率があまり良くない。 2."yyyy/mm/dd" のデータを直で "RIGHT( )" で処理させると思ったとおりの値が戻ってこない。 yyyy/mm/dd      RIGHT() 2005/1/5    →   8537 …変な値が戻ってくる? VBAで一気にやる方法ありますでしょうか? お知恵を拝借ください!

  • ACCESS 日付の比較

    日付を比較してstrToDateよりstrFromDateの日付が未来日だった場合エラーを出したいのですがうまくいきません。 日付型に合わせたつもりなのですがこれだとダメなのでしょうか strFromTime = txtFromYear & "/" & Format(txtFromMonth, "00") & "/" & Format(txtFromDay, "00") strToTime = txtToYear & "/" & Format(txtToMonth, "00") & "/" & Format(txtToDay, "00") If (Format(strFromTime, yyyy / mm / dd) >   Format(strToTime, yyyy / mm / dd)) Then MsgBox MSG_ERR, vbCritical, SYSTEM_NAME Exit Sub End If

専門家に質問してみよう