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

超初心者です。どうぞよろしくお願いします。
教職員で出欠記録の管理をAccessでやろうと思っています。
AccessのDlookup関数の使い方が分かりません。

テーブルA:
     フィールド名:授業日
     データ   :2009/4/7
           :2009/10/5

テーブルB:
     フィールド名:期間名称   初日   最終日
     データ   :前期    2009/4/1  2009/9/30
           :後期    2009/10/1  2010/3/31

があるとします。クエリーの中でテーブルBの条件を見ながら
テーブルAのデータを判断させて
            授業日      期間名称
     データ   :2009/4/7  →→→ 前期
           :2009/10/5 →→→ 後期
と表示させたいのです。Dlookup関数でやれると思っているのですが
うまくいきません。何とかならないでしょうか。今までは手入力していましたが無駄に思えます。

1.クエリーの中で
2.できるだけ簡単に

を条件として何とかなりませんか。
モジュールとかVBAは全く分かりません。”簡単”というのを第一にお願いします。
なお,うまくいくようなら当然Dlookup関数にはこだわりません。

以上,よろしくお願いします。

         

A 回答 (3件)

うまく伝えることができるかが難点ですが




テーブルA/Bの内容が以下だとします。
(ここだけ、新規mdbで確認してみてください)

テーブルA)
授業日
2009/04/07
2009/10/05
2009/05/08
2009/03/02
2009/11/03
2009/12/05

テーブルB)
期間名称初日最終日
前期2009/04/012009/09/30
後期2009/10/012010/03/31

ここで、#1での手順に従って、クエリを作成実行すると

授業日期間名称
2009/04/07前期
2009/10/05後期
2009/05/08前期
2009/11/03後期
2009/12/05後期

の様になります。

> 複数のデータの他のデータも表示されません
これは、授業日/期間名称しか表示選択していないので、他は表示されません。
表示したいものは、追加設定していきます(本来のテーブルAの内容上で)


DLookup の方法も書いておきます。

今まで使用していたテーブルAを表示するクエリをデザインで開きます。
表示したい位置のフィールド欄に以下を記述します。
(テーブルBを表示する必要はありません)

期間名称: DLookUp("期間名称","テーブルB","[初日] <= #" & 授業日 & "# AND [最終日] >= #" & 授業日 & "#")


上記テーブルA/Bの内容で、授業日/期間名称を表示させると

授業日期間名称
2009/04/07前期
2009/10/05後期
2009/05/08前期
2009/03/02
2009/11/03後期
2009/12/05後期

となります。

テーブルBの範囲にない日付 2009/03/02 の表示では、
前者:表示されません
後者:NULL (空白)表示となります



また別の方法:テーブルBを使わない方法)
4~9月:前期
10~3月:後期
という設定が今後も変わらないのであれば、授業日から計算します。

クエリを作ります。
テーブルAを表示させて、授業日をダブルクリックします。
授業日の隣のフィールド欄に以下を記述します。

期間名称: IIf(Month(DateAdd("m",-3,授業日))<=6,"前期","後期")

内容的には、3か月前の月を求め、6以下なら前期、でなければ後期

クエリをデータシートビュー表示にして表示を確認します。

授業日期間名称
2009/04/07前期
2009/10/05後期
2009/05/08前期
2009/03/02後期
2009/11/03後期
2009/12/05後期

サンプルのデータでは、上記の様になります。
前回 範囲外であった 2009/03/02 にも期間名称は埋められています。


またわからなかったら、補足してください。
    • good
    • 1
この回答へのお礼

感謝感激です。

今回ご指導頂いた方法で,完全に一致した結果が得られました。
新規で実験用に作ったデータベースでは希望した通りの結果です。

まだ,追記して頂いた方法は実験していませんが,最初の方法で問題は解決しています。

今回の件で,クエリーやBetween について,理解が深まった気がします。お陰様で,大きな山場を抜けた気がします。

早速,開発中のデータベースで同様のことをやってみます。
有り難うございました。

お礼日時:2009/08/27 23:38

> Between #"[初日]"# And #"[最終日]"# と入力すると



いえいえ、加工しないでください。


> 授業日の抽出条件に以下を記述します。
> BETWEEN [初日] AND [最終日]

このまま、やってみてください。

この回答への補足

そのまま,やってみました。
エラー表示は確かに出ませんでしたが,テーブルAの先頭の
データ(2009/4/7)が2回表示されて,それにそれぞれ「前期」「後期」と表示されただけでした。

当然,2回目の表示ではこの日付は「後期では無い」ので誤りの表示になっています。

本来入力した複数のデータの他のデータも表示されません。
何がうまくいかない原因なのでしょうか?

補足日時:2009/08/27 07:30
    • good
    • 0
この回答へのお礼

何度も,お付き合い頂いて感謝しています。

まだ,うまくいきません。
ご面倒でなければいましばらくご指導下さい。

追記

質問の仕方が悪いのかもしれません。
具体的にどこを詳しく記入すればいいですか?

どうぞ,よろしくお願いします。

お礼日時:2009/08/27 07:45

クエリを作成します。



クエリデザインから作成します。

テーブルA と テーブルBを表示します。

テーブルAの授業日をダブルクリックします。
テーブルBの期間名称をダブルクリックします。

授業日の抽出条件に以下を記述します。
BETWEEN [初日] AND [最終日]

クエリ表示をデータシートビューに切り替えてみます。

良ければ保存します。


こういうことで良かったのでしょうか。

この回答への補足

Between #"[初日]"# And #"[最終日]"# と入力すると

不適切な日付・・・というエラーメッセージがでます。
残念ですが,まだ,うまくいっていません。

よろしくお願いします。

補足日時:2009/08/25 01:15
    • good
    • 0
この回答へのお礼

早速のご回答とご指導に感謝します。有り難うございました。
今,確認中ですが「抽出条件でデータ型が一致しません」
というメッセージが出ました。

以前,データの型と言うことで#で囲むとか,"で囲むとか
どこかで見た気がするので,あちこち調べて実験していますが
まだ,うまくいきません。

もう少し,助けて頂けませんか?
よろしくお願いします。

お礼日時:2009/08/25 01:08

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

関連するカテゴリからQ&Aを探す