次の方法で共有

テキストボックスの日付入力のチェック

Anonymous
2012-11-12T03:02:13+00:00

テキストボックスに入力した日付文字列の入力確認処理です。

DateValue()関数で

mydat=datevalue(UserForm8.TextBox6.Value)

と記述してみまし、日付になりえない、たとえば

212/10/3などと入力しても、mydateの中には"212/10/3""

と代入されてエラーになりません。

Private Sub TextBox6_AfterUpdate()

    On Error GoTo ErrorHandler

    cells(10,5) = DateValue(UserForm8.TextBox6.Value)

    On Error GoTo 0

Exit Sub

ErrorHandler:

    MsgBox ("入力された数値は日付になりません。再入力してください。")

    UserForm8.TextBox6 = ""

    Resume Next

End Sub

と、cells(x,y)に代入するとうまく動きます。しかしワークシートに

仮に代入と言うのが気に入りません。

西暦で入力することを前提に、入力された日付ネジ列を

年数と月数と日付に分解して其々をチェックする方法もありますが

出来れば1行で、datevalueを利用できる方法が有るでしょうか。

どなたか教えてください。

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2012-11-12T09:13:03+00:00

失礼しました。

錯覚して半端なレスをいれました。

日付に関して裏表がわかっているつもりはありませんが、VBAのDateValue 関数はヘルプによれば、

DateValue(date)

引数 date は必ず指定します。引数 date には、通常、100 年 1 月 1 日から 9999 年 12 月 31 日までの範囲の日付を表す文字列式を指定します。

となっていますので、212年もエラーにはならないわけです。

また、Date型は

日付型 (Date) の変数は、IEEE 64 ビット (8 バイト) の浮動小数点数の変数です。西暦 100 年 1 月 1 日~西暦 9999 年 12 月 31 日の範囲の日付と、0:00:00 ~ 23:59:59 の範囲の時刻を表すことができます。

と言う事でワークシートの扱いと異なります。

ですから、年数部分はシートに入れればエラーになる場合も正常に処理してしまっているわけです。

で解決策ですが、エラーに引っかからない場合年に関するチェックを入れたらいかがでしょうか?

例えば2000以降でなければエラーとして扱うなどです。

(Year 関数は正常な値を返してくれます)

Sub ccc()

Dim X As String, y As Date

X = "212/10/3"

y = DateValue(X)

MsgBox Year(y)

End Sub

参考まで。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2012-11-12T09:49:14+00:00

    y sakud  さま

    VBAですと100年からスタートなのですか。

    てっきりエクセルと同じ範囲でしか扱えないと思っていました。

    y sakudさまのように、年数を取り出して確認する方法ですね。

    ワークシートに落とすとエラーなのにと、理由がわからなかった

    のが解決いたしました。

    ありがとうございます。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2012-11-12T05:47:37+00:00

    y sakuda さま

    以前はお世話になりました。

    また今回も素早い回答をありがとうございます。

    ResumeNextのご指摘ありがとうございます。

    基本的な事を理解していないのですね。私は。

    またまた勉強させていただきました。

    で、212/10/31が、セルに代入するとエラーが発生しますので

    こんな処理をしたのですが、マクロで内では単に文字列でしか

    ないのですね。一度シリアルに変換してチェックをかければよいかも。

    今一度方法を考えてみます。ありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2012-11-12T03:49:45+00:00

    >212/10/3

    はまともな日付と解釈できますから、エラーにならないはずですが?

    (セルに入れても同じです)

    テキストボックスのデータチェックはすべてプログラマの責任でやらないとだめですから、

    ご自分で書かれているような方法によるしかありません。

    で本論と関係ないと言えばないのですが、 On Errorの使い方がちょっと変です。

    Errorハンドラーを使っておられるので、Resume Nextは不要です。

    Resume Next を使われるなら、↓みたいなことになります。

    Sub aaa()

    Dim x As String, y As Date

    x = "212/10/31"

    On Error Resume Next

    y = DateValue(x)

    If Err.Number <> 0 Then

      MsgBox "error " & x

    Else

      MsgBox x

    End If

    On Error GoTo 0

    End Sub

    参考まで

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません