Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


265 / 2272 ツリー ←次へ | 前へ→

【12332】BETWEENを使った検索、片方のみ入力された場合 nneeww 13/6/11(火) 11:03 質問[未読]
【12333】Re:BETWEENを使った検索、片方のみ入力され... かるびの 13/6/11(火) 14:41 回答[未読]
【12334】Re:BETWEENを使った検索、片方のみ入力され... nneeww 13/6/12(水) 13:53 お礼[未読]

【12332】BETWEENを使った検索、片方のみ入力され...
質問  nneeww  - 13/6/11(火) 11:03 -

引用なし
パスワード
   お世話になっております。

複数のテキストボックス(odf,odt,cm,sp)を使って条件を入力し検索を行うフォームを作っています。
odfとodtは日付を入力するテキストボックスで、betweenでodfからodtの期間を指定するようになっています。

二つとも入力が行われれば問題なく検索できるのですが、片方だけの入力だとすべてのデータが表示されてしまいます。
今、両方に日付が入力されていない場合検索が行えないようにしているのですが片方にだけ日付が入った状態で検索が押されたとき、もう一方にも同じ日付が入っているとして検索を行うのが理想です。考えてみましたがどうしたらよいかわかりませんでした。
日付の入力方法はカレンダーをクリックするor手入力(入力規則設定)です。

ご存知の方、どうぞよろしくお願いいたします。


'  入力された値のチェック
  If IsNull(odf) And IsNull(odt) And IsNull(cm) And IsNull(sp) Then
'  /すべて空欄のとき-「すべてのデータを表示しますか?」
    a = MsgBox("すべてのデータを表示しますか?", vbYesNo)
      If a = vbYes Then
        DoCmd.OpenQuery "結果表示"
      End If
      Exit Sub
'  /日付にだけ値が入力されている場合、検索に移る
    ElseIf IsNull(cm) And IsNull(sp) Then
      GoTo kekka
'  /数字以外が含まれているとき-「数字を入力してください」
    ElseIf IsNumeric(cm) = False And IsNumeric(sp) = False Then
      MsgBox "数字を入力してください"
      Exit Sub
'  /桁数が違うとき-「有効な値であるか確認してください」
    ElseIf Len(cm) <> 5 Then
      MsgBox "有効な値であるか確認してください"
      Exit Sub
    ElseIf Len(sp) <> 3 Then
      MsgBox "有効な値であるか確認してください"
      Exit Sub
  End If

'  (Ifに該当しない場合)結果を表示
kekka:
'  /片方にしか日付が入力されていない場合、検索を行わない
  If IsNull(odf) = False Or IsNull(odt) = False Then
    If IsNull(odf) Or IsNull(odt) Then
      MsgBox "日付が片方にしか入力されていません"
    Exit Sub
    End If
  End If
  
  DoCmd.OpenQuery "結果表示"

【12333】Re:BETWEENを使った検索、片方のみ入力さ...
回答  かるびの E-MAIL  - 13/6/11(火) 14:41 -

引用なし
パスワード
    クエリ「結果表示」の日付についての抽出条件欄において、
コントロールを参照しているところに、Nz関数をかませたらどうでしょうか。

 例えば、odfの代わりに、
   Nz(odf.Value,odt.Value)
とする方法です。
 odfがNullの場合、この関数はodtの値を返しますので、
odtが2013/6/11とすれば、抽出条件を
   2013/6/11 Between 2013/6/11
とすることができます
(前の2013/6/11はNz関数の適用結果、後はodtの値)。

 ただ、この方法は、odf、odtともにNullの場合には使えないですね。

【12334】Re:BETWEENを使った検索、片方のみ入力さ...
お礼  nneeww  - 13/6/12(水) 13:53 -

引用なし
パスワード
   クエリを変えることを全く思いつきませんでした。

> ただ、この方法は、odf、odtともにNullの場合には使えないですね。
これをどう処理してよいかわからなかったので最終的に場合分けを行うことで解決しました。
(なぜ使えないのかすらわかっていないレベルなので勉強します;)
具体的には、between odf and odt,sp,cmの三つで場合分けを行っていたのをbetwee odf and odt,sp,cm,odfの四つで場合分けを行い、odtのみの入力を拒むようにしました。

無事目的を果たすことができ、とても助かりました。
どうもありがとうございました。

265 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free