- ベストアンサー
アクセスのカウント(件数)について。
アクセスでAフィールドとBフィールドがあり、AフィールドとBフィールドの両方に入力があるレコードと、AフィールドとBフィールドのどちらかに入力があるレコードの合計レコード数を求めたいのですが、どのようにしたらよいのでしょうか?(つまりAフィールドとBフィールドの両方に入力がないレコード以外をカウントしたいのです。)よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
DCOUNT 関数の実態は、次のようだと推察されます。 そうであれば、関数の引数は DCOUNT("*", テーブル名, 条件節) となります。 ですから、見た目では正しいようですが・・・。 もしかしたら、'件数’がテーブル名ではないのかなーとも・・・。 下記のDBCount() でも試されたら、多少は原因が見えてくるかも知れません。 なお、DBCount() は、DCount() より3倍速で動作します。 Public Function DBCount(ByVal strField As String, _ ByVal strTable As String, _ Optional ByVal strWhere As String = "") As Variant On Error GoTo Err_DBCount Dim N Dim strQuerySQL As String Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset strQuerySQL = "SELECT COUNT(" & strField & ") FROM " & strTable If Len(strWhere) > 0 Then strQuerySQL = strQuerySQL & " WHERE " & strWhere End If With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst N = Nz(.Fields(0), 0) End If End With Exit_DBCount: On Error Resume Next rst.Close Set rst = Nothing DBCount = N Exit Function Err_DBCount: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBCount)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBCount End Function
その他の回答 (2)
s_husky です。 "A is null AND B is null") "Len(A & '') = 0 AND Len(B & '') = 0" と、質問を良く読まずに全く逆の条件を書いていました。 ま、ここら辺りは応用して下さい。
お礼
ありがとうございます。下記の記述でうまくいかないのですが、どこがおかしいでしょうか?申し訳ありません。 ? DCOUNT("*", "件数", "[検鏡] is null AND [抗酸菌染色] is null")
ID A B 1 1 2 1 1 3 4 1 ? DCOUNT("*", "テスト", "A is not null AND B is not null") 1 ID A B 1 1 2 1 1 3 4 1 1 ? DCOUNT("*", "テスト", "A is not null AND B is not null") 2 と、DCOUNT関数でカウント可能です。 ? DCOUNT("*", "テスト", "Len(A & '') > 0 AND Len(B & '') > 0") 2 と、ヌルを Len関数で判定しても構いません。 クエリに関する質問ならば、同じようなWhere節をそのままクエリに書いて下さい。
お礼
何度も申し訳ありません。これで最後にします。 ?DCOUNT("*","件数","検鏡]is null AND [抗酸菌染色]is null") 「演算子がないときにオペランドを使用しています」というエラーが出ます。どういうことでしょうか。