- ベストアンサー
Accessクエリで他のクエリの条件を満たすレコードの項目を表示する方法
- Accessのクエリで、あるフィールドに他のクエリの特定の条件を満たすレコードの項目を表示する方法を教えてください。
- 具体的には、データ元とするクエリの構成と組みたいクエリの構成を説明しました。
- DLookupを使用する方法についても考えましたが、うまくいきません。初心者なので、詳しい方法を教えていただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
クエリ1: ID_社員番号_時間帯別業務内容_業務割合 _1______101_業務内容_A_____________50 _2______101_業務内容_B_____________50 _3______102_業務内容_A_____________20 _4______102_業務内容_B_____________80 クエリ2: 社員番号_業務内容_Aの割合_業務内容_Bの割合 _____101_______________50_______________50 _____102_______________20_______________80 SELECT クエリ1.社員番号, DBLookup("SELECT 業務割合 FROM クエリ1 WHERE 社員番号=" & [社員番号] & " AND 時間帯別業務内容='業務内容_A'") AS 業務内容_Aの割合, DBLookup("SELECT 業務割合 FROM クエリ1 WHERE 社員番号=" & [社員番号] & " AND 時間帯別業務内容='業務内容_B'") AS 業務内容_Bの割合 FROM クエリ1 GROUP BY 社員番号 ORDER BY 社員番号; まあ、確かに関数などを使えばかかる芸当も簡単に実現できます。 しかし、この類の整形表示をやってみせると色々と後々のメンテナンスも大変かと思います。 ところで、Dlookup()は少し処理速度に問題があります。 ですから、次のような DBLookup関数を用いた方が処理は快適です。 なお、SQL文での正規表現を志すのであれば、こういう安直な方法は避けるべきかも知れません。 Public Function DBLookup(ByVal strQuerySQL As String) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = DataValue Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function
お礼
連絡が遅れ申し訳ありません。 本当に丁寧な回答をしていただき非常に助かりました。 (若干私にはレベルが高くて苦労しましたが・・・。) ご指摘の通りもっとデータベースらしい?使い方ができるように心がけねばなりませんね。 ありがとうございました!