こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MS-Access VBAでLookupのような

MS-Access2000を使っています。
テーブルに時間が指定してあり、その時間幅に合わせて文字列を検索したいと考えています。
Excelのlookup のように対象の値を入れると同数以外は前の(上の)数字を検索するという処理をしたいのです。
しかし、VBA内ではVlookupは無く、DLookupとなり値が同数でなければ「null」を返してきます。
何か良い方法はあるでしょうか?ぜひ、回答をよろしくお願い致します。

VBAでの関数
temp = DLookup("表記", "T_時間帯", "開始 = #" & Me.時間帯 & "#")

T_時間帯
開始 表記
9:00  午前中A
10:30 午前中B
13:00 午後A
15:00 午後B


*9:30をMe.時間帯に入れておくと検索値を「9:00」としたい
*12:59Me.時間帯に入れておくと検索値を「10:30」としたい
*13:00Me.時間帯に入れておくと検索値を「13:00」としたい
*17:00Me.時間帯に入れておくと検索値を「15:00」としたい

投稿日時 - 2013-04-02 10:16:11

QNo.8023274

すぐに回答ほしいです

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

temp = dmax("表記", "T_時間帯", "開始 <= #" & Me.時間帯 & "#")
でどうですか?

投稿日時 - 2013-04-02 14:08:30

お礼

ありがとうございました。「開始」の最初を検索して、その中から最大値の値が目標とする答えなんて、考えもつきませでした。
昨日の夕方に回答を見て作成しまして、とりあえず形になりました。御礼が遅れてすみません。本当にありがとうございました。

投稿日時 - 2013-04-03 14:14:10

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

select case で処理してはどうでしょうか?

参考までにコードを。
15:00以降から9:00未満はElseで処理しています。



'timev=入力された時間値

'SearchTime=検索時使用する丸めた(切り上げた)時間値


Select Case True

Case timev >= #9:00:00 AM# And timev < #10:30:00 AM#
SearchTime = #9:00:00 AM#

Case timev >= #10:30:00 AM# And timev < #1:00:00 PM#
SearchTime = #10:30:00 AM#

Case timev >= #1:00:00 PM# And timev < #3:00:00 PM#
SearchTime = #1:00:00 PM#

Case Else
SearchTime = #3:00:00 PM#

End Select

投稿日時 - 2013-04-02 11:27:54

お礼

回答をありがとうございました。
そうですね。対象外をelseにしてselect caseを使っても良かったのですね。
切羽詰っていましたので、どうも思った以上のことは出来なかったようです。
今後の参考になると思いますので、私のライブラリに保管しておきます。ありがとうございました。

投稿日時 - 2013-04-03 14:17:26

あなたにオススメの質問