私の知る限り、ドメイン集計関数で複数のテーブルまたはクエリを参照することはできません。grazird が言うように、これらのテーブルはどのように関連していますか? tblMain ID にあるとしましょう。たとえば、qryMainOffice という名前のクエリを作成できます。SQL (SQL ビュー、クエリ デザイン ウィンドウ) は次のようになります。
SELECT [tblMain].[Revenue],[tblMain]![Quarter],[tblMain]![Region],
[tblOffice]![Location]
FROM tblMain
INNER JOIN tblOffice
ON tblMain.ID = tblOffice.MainID
DSum は次のようになります (改行を削除します)。
=NZ(DSum("[Revenue]","qryMainOffice",
"[Quarter]=3 AND [Region]='NorthEast' AND [Location]='NewYork'"),"Not found")
VBA でレコードセットまたはクエリを使用して値を返すこともできます。
コメントを編集
上記を VBA で使用するには、パラメーターを追加するか、文字列を使用する必要があります。
''Reference: Microsoft DAO 3.x Object Library
Dim rs As DAO.Recordset
Dim db As Database
Dim strSQL as String
Set db= CurrentDB
strSQL = "SELECT Sum(t.[Revenue]) As TotalNY" _
& "FROM tblMain t " _
& "INNER JOIN tblOffice o " _
& "ON t.ID = o.MainID " _
& "WHERE t.[Quarter]=3 AND t.[Region]='NorthEast' " _
& "AND o.[Location]='NewYork' " _
'' I have use aliases for simplicity, t-tblMain, o-tblOffice
'' If you wish to reference a control, use the value, like so:
'' & " AND [Location]='" & Me.txtCity & "'"
'' Dates should be formated to year, month, day
'' For joins, see http://www.devshed.com/c/a/MySQL/Understanding-SQL-Joins/
Set rs = db.OpenRecordset strSQL
If Not rs.EOF Then
Me.txtAnswer = rs!TotNY
Else
Me.txtAnswer = "N/A"
End If
さまざまなクエリを使用して、リスト ボックスまたはサブフォームで表示できる複数の結果を返すこともできます。
strSQL = "SELECT TOP 5 o.[Location]," _
& "Sum(t.[Revenue]) AS TotRevenue" _
& "FROM tblMain t " _
& "INNER JOIN tblOffice o " _
& "ON t.ID = o.MainID " _
& "WHERE t.[Quarter]=3 AND t.[Region]='NorthEast' " _
& "GROUP BY o.[Location]"
上記は、北東地域のすべての場所の第 3 四半期の収益を返します。各グループの上位の値が必要な場合は、より複雑なクエリを見ていることになりますが、ここでは省略します。