- ベストアンサー
クエリ条件式で複数のコンボボックスの値を参照する方法
- 複数のコンボボックスの値を組み合わせてクエリの条件式に参照する方法について説明します。
- 通常は単一のコンボボックスの値を参照する際には、[Forms]![フォーム名]![コンボボックス名]という条件式を使いますが、複数のコンボボックスの値を組み合わせる場合はどのように記述すればよいでしょうか。
- クエリのデザインビューではできない場合は、モジュールでの記述方法も紹介します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>日時データ内のたくさんある要素の中から時と分のみをコンボボックスで参照してクエリを作りたい、という内容です。 なるほど、状況が分かってきました。 >テーブルの表示上は書式で時と分しか表示されない様にしてある(13:00の様な形式)けれども、実際には年~秒までのデータが入っていますよね?これが原因でしょうか? はい、その通りで、書式は見た目だけの問題で、データの内容は変化しません。 抽出条件で比較されるのは内容なので、書式は全く影響しません。 時間と分だけで条件を絞り込みたいと言うことなので、 日付型のデータから、時間と分のみを取り出す必要があります。 Hour関数とMinute関数を利用します。 それと、グラフの元データに利用すると言うことなので、 VBAは使わずに、クエリで処理した方が楽かと思います。 ----以下手順---- コンボボックス名を下記と仮定します。 [開始時][開始分][終了時][終了分] 選択クエリ1をデザインビューで開き、下記のフィールドを追加します。 時分: Hour([時刻])*100+Minute([時刻]) このフィールドの抽出条件を下記にします。 >=([Forms]![フォーム名]![開始時]*100+[Forms]![フォーム名]![開始分]) And <([Forms]![フォーム名]![終了時]*100+[Forms]![フォーム名]![終了分]) ----以上手順---- >= や < の不等号は、調整してください。 上記は開始時間は含めるが、終了時間は含めていません。 両方含めるなら、下記のような記述も出来ます。 Between [Forms]![フォーム名]![開始時]*100+[Forms]![フォーム名]![開始分] And [Forms]![フォーム名]![終了時]*100+[Forms]![フォーム名]![終了分] 内容としては[時刻]から時間と分を取り出し、整数化しています。 同様に、コンボボックスの内容も整数化し、それを選択範囲に使っています。 整数化に関しては方法は色々あります。 上記の例は、時間を100倍し、分をそのまま足しています。 12:34 → 1234 時間を60倍し、分を足して、分単位にする方法でもOKです。 12:34 → 754 比較に使うだけなので、どんな方法でも構いません。
その他の回答 (1)
- venzou
- ベストアンサー率71% (311/435)
各コンボボックス名を、[年][月][日][時][分][秒]と仮定します。 エラー処理を考えないなら、下記で日付型に変換できます。 CDate([Forms]![フォーム名]![年] & "/" & [Forms]![フォーム名]![月] & "/" & [Forms]![フォーム名]![日] & " " & [Forms]![フォーム名]![時] & ":" & [Forms]![フォーム名]![分] & ":" & [Forms]![フォーム名]![秒]) 連結して日付形式の文字列にし、CDateで日付型に変換しています。 コンボボックスの値が正常範囲でない場合や、 Null の場合にエラーになりますので、 コンボボックスに入力規則を設定した方が良いでしょう。 例: 入力チェック→はい 入力規則→Is Not Null ---------------------------------------------------------- 上記の方法で目的が達成できれば蛇足ですが、 モジュールを使う方法について。 その選択クエリを何に使うのか?で、回答が異なってきます。 例えば、レポートに出力するレコードを選択するとか、 フォームに表示するレコードを選択するとか、 集計クエリの元になるレコードを選択する等々・・・ 目的によって最適な方法が異なりますので、モジュールでの記述が知りたいなら、 もう少し詳しい情報を補足して頂いた方が良いと思います。
補足
ご返答頂きありがとうございます。 実際にはある時間範囲のレコードを抽出し、それをフォーム上でグラフ化することを検討しています。 上の質問では年~秒まで書きましたが、実際に抽出で選択するのは[時]と[分]の部分だけです。 要は9:00~10:30の様な形でコンボボックスを使って時間範囲を選択させる形です。 (時は0~23まで、分は00,15,30,45の4つから選択) 選択するのはコンボボックス4つ、抽出したい時間範囲の初めの[時]と[分]、終わりの[時]と[分]です。 日付/時刻型フィールドとして挿入されている日時データから時と分だけをコンボボックスで選択して抽出させたいのですが、先ほど上でご回答いただいた例から時と分の部分だけを使ってやってみましたが上手くいきませんでした。 テーブルの表示上は書式で時と分しか表示されない様にしてある(13:00の様な形式)けれども、実際には年~秒までのデータが入っていますよね?これが原因でしょうか? なおクエリ実行時元となるテーブルには当日分のレコードしか入っておらず(年月日部分は全て同じ)、コンボボックスで選択の際も日付の指定は必要ない様にさせたいと思います。 日時データ内のたくさんある要素の中から時と分のみをコンボボックスで参照してクエリを作りたい、という内容です。 説明がわかり辛くて申し訳ありません。
お礼
ご返答ありがとうございます。 Hour関数とMinute関数、知りませんでした...(汗) 確かにこれを使えば簡単に比較可能ですね! おかげで何とか目標達成出来そうです。 また機会がありましたらよろしくお願いいたします。