Nz()
間違いなくあなたが探している機能です。あなたはそれを試したら戻ったと言いますがNull
、私はそれを信じるのは難しいとNz()
思います。参考のため:Null
x = Nz(Null, 0)
0 を返します ( VbVarType.vbInteger
)
x = Nz(Null, "")
空の文字列 ( VbVarType.vbString
)を返します
x = Nz(Null)
空の変数 (VbVarType.vbEmpty
ではなく VbVarType.vbNull
)を返します
編集
さらに調査すると、特定のケースの問題は、COUNT(re.rule_status)
も実行するクエリで a を実行していることGROUP BY re.rule_status
です。クエリのWHERE
句が空のセット (行が返されない) になる場合、クエリ全体では、値が 0 または Null の単一の行ではなく、単に行が返されません。
これは、次のテスト コードで確認できます...
Sub NzTest()
Dim rst As DAO.Recordset, strSQL As String
strSQL = "SELECT Nz(COUNT(LastName), 0) FROM Members WHERE False GROUP BY LastName"
Debug.Print strSQL
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If rst.EOF Then
Debug.Print "No rows were returned."
Else
Debug.Print "Count = " & rst(0).Value
End If
rst.Close
Set rst = Nothing
End Sub
...結果を生成します
SELECT Nz(COUNT(LastName), 0) FROM Members WHERE False GROUP BY LastName
No rows were returned.
を削除するGROUP BY
と...
SELECT Nz(COUNT(LastName), 0) FROM Members WHERE False
Count = 0
...そして実際Nz()
には、その場合は必要ありません:
SELECT COUNT(LastName) FROM Members WHERE False
Count = 0