dポイントプレゼントキャンペーン実施中!

コンボボックスで選択された値を元に選択を行わせるクエリを作成しています。
ですがある特定のコンボボックスからの値でなく、複数のコンボボックスの値を組み合わせて選択を行うのはどの様にしたら良いのでしょうか?

テーブル名:テーブル1
クエリ名:選択クエリ1

選択の元になるフィールドはテーブル1内の[時刻]フィールドです。
ここは日付/時刻型になっており、表示形式は[YYYY/MM/DD HH:MM:SS]です。

この部分である範囲の選択を行いたいのですが、それの元となるコンボボックスを年/月/日/時/分/(秒)に分けたいと考えています。
(秒は無くても良い)

通常コンボボックスの値を参照する際は

Like [Forms]![フォーム名]![コンボボックス名]

という条件式を使いますが、複数のコンボボックスの値を組み合わせる場合はどのように記述したら良いのでしょうか?

またクエリのデザインビューで出来ない場合はモジュールでの記述方法をご教授頂けるとありがたいです。


よろしくお願いいたします。

A 回答 (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

比較に使うだけなので、どんな方法でも構いません。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

Hour関数とMinute関数、知りませんでした...(汗)

確かにこれを使えば簡単に比較可能ですね!

おかげで何とか目標達成出来そうです。

また機会がありましたらよろしくお願いいたします。

お礼日時:2007/10/22 17:44

各コンボボックス名を、[年][月][日][時][分][秒]と仮定します。



エラー処理を考えないなら、下記で日付型に変換できます。

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の様な形式)けれども、実際には年~秒までのデータが入っていますよね?これが原因でしょうか?

なおクエリ実行時元となるテーブルには当日分のレコードしか入っておらず(年月日部分は全て同じ)、コンボボックスで選択の際も日付の指定は必要ない様にさせたいと思います。
日時データ内のたくさんある要素の中から時と分のみをコンボボックスで参照してクエリを作りたい、という内容です。

説明がわかり辛くて申し訳ありません。

補足日時:2007/10/22 13:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!