![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
いつも質問ばかりですいません。
指定の日付範囲外の値に対してメッセージを出して再入力させたいのですが上手くいきません。
《条件》
今日より先は NG
今日より2日以上前は NG
1日前:OK
今日:OK
Dim txt01 As Date
' Dim txt02 As String
' Dim txt03 As Integer
Dim ckDate As Date
ckDate = Date - 2
'日付のチェック
If IsNull(Me.txt01) Then 'Nullチェック
MsgBox "txt01=Null"
Me.txt01.SetFocus
Exit Sub
ElseIf IsDate(Me.txt01) <> True Then
MsgBox "日付形式ではありません。"
Me.txt01.SetFocus
Exit Sub
ElseIf Me.txt01.Value < Date Then '前チェック
Debug.Print Me.txt01.Value
MsgBox "今日より先"
Me.txt01.SetFocus
Exit Sub
ElseIf Me.txt01.Value <= ckDate Then
MsgBox "2日以上前!"
Me.txt01.SetFocus
Exit Sub
End If
2番目の、Elseifからの日付範囲の条件設定が上手くいきません。
Me.txt01.valueの後ろを"<"を">"にしたり、"="を付けたりしましたが、希望通りになりません。
多分、もっとスマートな書き方が有るとは思うのですが、あとあとメンテナンスしやすい書き方をお教え頂けたら幸いです。
No.6ベストアンサー
- 回答日時:
#3 の NotFound404 でござります。
お恥ずかしい限りです。呆けてます。 orz
前回同様、只今 @酔 なので、ご質問者さまには『ごめんなさい』
#2/4/5さんへ
私に限って言えば、
ドンドンじゃんじゃんバンバンがんがん駄目出しをください。
お気遣いはご無用です。
技術的な話は、それが肝要かと思います。
(でも、やさしくお願い致いしたくです。「ヒック」zzz)
・・・と昨夜に投稿するつもりで寝てしまったようです。。。
これだけだとサイトの規定により丸ごと削除されるかもしれないので
ちょっと別案。
日付の手入力ではなくコンボボックスなどで選択するようにした方が
ユーザーさんは手間が省けてよいかも?
仮に「コンボ日付」というコンボボックスを作成し
フォームの読み込み時イベントでに
Private Sub Form_Load()
Me!コンボ日付.RowSourceType = "value list"
Me!コンボ日付.RowSource = "今日;" & Date & ";昨日;" & Date - 1
End Sub
とし
「コンボ日付」のプロパティは
データタブ
値集合タイプに、値リスト
連結列に、2
入力チェックに、はい
値リストの編集の許可に、いいえ
編集ロックに、はい
書式タブ
列数に、2
列幅に、1cm;3cm
リスト行数に、2
リスト幅に、4cm
などと設定してコンボボックスから選んでもらうのはいかが?
コンボ日付をプルダウンすると
今日|2014/1/27
昨日|2014/1/26
と表示されます。
連結列が2に設定してあるので
コンボ日付.Value で値が得られます。
また、コンボ日付.Column(1) でも可。
例
Private Sub コンボ日付_AfterUpdate()
msgbox Me!コンボ日付.Column(0) & Me!コンボ日付.Column(1) & vbcrlf & Me!コンボ日付.Value
以下省略
ご参考までに。
NotFound404様
度々回答ありがとうございます。
目からうろこの発想です。
うちはPCリテラシーが低い人が多いので、このやり方が一番簡単で良いと面ます。
No.5
- 回答日時:
IF文の条件を書きにくい場合は多々ありますから、
Thenで何もせず、Elseのみに処理を記述するのも良いですよ。
If cdDate =Date - 1 Or cdDate = Date Then
'処理日前日と処理日当日を許可する
Else '上記以外はエラーとする
Msgbox "範囲外の日付が入力されました。"
Exit sub
End if
もアリです。
#4は#3さんを批難するつもりではありませんので念のため。
bin-chan様
度々、補足ありがとうございます。
なるほど、今回の場合選択肢が2日だけですから、このやり方もありですね。
勉強になりました、ありがとうございます。
No.4
- 回答日時:
#2です。
#3さんの回答への補足について> If cdValue <= Date And cdValue >= Date - 1 Then
> Date型へ変換してもどんな日付でも通ってしまいます。
> なにか間違ってますでしょうか?
#2でも指摘したことだが、不等合の向きがおかしい。
「どんな日付でも」に昨曰入れてみた?
「今曰以前で、かつ、昨日以上」がThen(エラー検知処理)って何?
If cdValue > Date Or cdValue < Date - 1 Then
でしょ
If cdValue < Date - 1 Or Date < cdDate Then
と書けばわかりやすいのかな
bin-chan様
回答ありがとうございます、どうも頭が悪いせいか条件式の評価の理解がたりてないようです。
下段の記述が私には、理解しやすいです。
この場合、ORでもよいわけですね。
No.3
- 回答日時:
今日と昨日の日付以外は弾きたいのだから
dim dValue as variant
dvalue = nz(Me.txt01,0)
if not isdate(dvalue) then
msgbox "日付が間違っています。入力できるのは、今日か昨日の日付だけです"
exit sub
end if
if dvalue <= date and dvalue >= date -1 then
msgbox "入力できるのは、今日か昨日の日付だけです"
exit sub
end if
みたいな感じで良いんじゃないかと?
この回答への補足
どんなデータでも日付であれば通ってしまったので、少し書換えさせて頂きました。
Private Sub コマンド8_Click()
Dim txt01 As Date
Dim dValue As Variant
Dim cdValue As Date
dValue = Nz(Me.txt01, 0)
Debug.Print "--------------------"
Debug.Print dValue
Debug.Print TypeName(dValue)
If Not IsDate(dValue) Then
MsgBox "日付が間違っています。入力できるのは、今日か昨日の日付だけです"
Debug.Print dValue
Exit Sub
Else
Debug.Print "OK"
End If
cdValue = CDate(dValue)
Debug.Print TypeName(cdValue)
If dValue <= Date And dValue >= Date - 1 Then
MsgBox "入力できるのは、今日か昨日の日付だけです"
Exit Sub
Else
Debug.Print "OOKK"
Debug.Print "dvalue : " & dValue & " | 型 :" & TypeName(dValue)
End If
End Sub
インティミディエイトの値
--------------------
2014/01/30
String
OK
Date
OOKK
dvalue : 2014/01/30 | 型 :String
String型なので、評価し出来ないかと考え
cdValue = cDate(dValue)
型を変換して↓を実行
If cdValue <= Date And cdValue >= Date - 1 Then
--------------------
2014/01/30
String
OK
Date
OOKK
cdvalue : 2014/01/30 | 型 :Date
Date型へ変換してもどんな日付でも通ってしまいます。
なにか間違ってますでしょうか?
シンプルなコーディングで、非常にわかりやすいと思ったのですが、式の評価がうまく行きません。
No.1
- 回答日時:
>2番目の、Elseifからの日付範囲の条件設定が上手くいきません。
txt01のデータ形式はなんでしょうか?
DATE型なら問題ないはずなのでSTRING型でしょうか?
それならば
CVDate(Me.txt01.Value)
とすればいいと思います。
http://access2010.kjeh34.com/k006-2/59/
mshr1962様
回答ありがとうございます、すいませn他の変数と一緒に宣言したので、ハチョリました。
Dim txt01 As Dateで宣言しているので、Date型です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンで購入したデーターが...
-
「24日の0時」って・・・
-
TODAY関数から次の火曜もしくは...
-
下の画像はアンドロイドタブレ...
-
回覧板の日付について質問です...
-
ACCESSで1月1日~12月31日まで...
-
「時間」、「期日」、「日付」...
-
エクセルで6ヵ月後を自動入力で...
-
エクセルで日付け表示で、明治...
-
Excelについて
-
Word365ですが、今日の日付と明...
-
Excelの関数について質問です。
-
満年齢(EXCEL)について・・・
-
VBA テキストボックスで日付を...
-
Googleスプレッドシートで ひと...
-
ORACLEでの日付編集形式
-
差し込み印刷に当日の日付が入...
-
送信済みアイテムの日付が合わ...
-
天皇(万世一系、皇紀、教育勅...
-
【Excelの不思議な日付処理の初...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンで購入したデーターが...
-
「24日の0時」って・・・
-
「時間」、「期日」、「日付」...
-
差し込み印刷に当日の日付が入...
-
日付の大小の表現
-
回覧板の日付について質問です...
-
エクセル マクロ 名前を付けて...
-
履歴書の日付間違いで落ちますか。
-
EXCELで日付を****年上期、****...
-
エクセルで6ヵ月後を自動入力で...
-
ACCESSで日付ごとに自動連番(...
-
WEEKDAYが反映されない
-
ACCESSで1月1日~12月31日まで...
-
会社や役所などに提出する書類...
-
日付以外のデータを抽出したい...
-
エクセルで日付別にシートを分...
-
Excelでヘッダに前日の日付を表...
-
エクセルで日付け表示で、明治...
-
2つの日付の中間の日付 エク...
-
差込印刷 縦書きで和暦(漢数...
おすすめ情報