• ベストアンサー

Accessで、一項目の値ごとにカウントしたい

Accessのテーブルの項目に、AとBとCという項目が設定されています。 Aが何件、Bが何件、Cが何件 というレポートを作りたいのですが、クエリでやってみると、 同一項目を3つにそれぞれの条件でカウントしようと記述しても、 AND条件になって、できませんでした。 条件式を考えれば当たり前なのですが・・・。 これをシンプルな方法で実現するにはどうすればよいでしょうか? アドバイスお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.2

<tab1> ID___fld_1 01__A 02__A 03__B 04__B 05__C <クエリ1> Count_A__Count_B__Count_C _________2___________2___________1 SELECT DBCount("*","tab1","fld_1='A'") AS Count_A, DBCount("*","tab1","fld_1='B'") AS Count_B, DBCount("*","tab1","fld_1='C'") AS Count_C; まあ、シンプルと言えばシンプルです。 留意事項は、戻り値がVariantだということです。 Public Function DBCount(ByVal strField As String, _             ByVal strTable As String, _             Optional ByVal strWhere As String = "", _             Optional ByVal ReturnValue = 0) 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 = .Fields(0)      End If    End With Exit_DBCount: On Error Resume Next    rst.Close    Set rst = Nothing    DBCount = IIf(N <> 0, N, ReturnValue)    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

groovyreality
質問者

お礼

細かいコードまでアドバイスいただき ありがとうございました。

その他の回答 (1)

回答No.1

サブクエリでできるはずです。 これが正しいやり方かどうかはわからないのですが・・・ nullじゃない件数を出す場合 SELECT Count([A]) AS Aの件数,(SELECT Count([B]) FROM テーブル1) as Bの件数 ,(SELECT Count([C]) FROM テーブル1) as Cの件数 FROM テーブル1; 数値で0じゃない件数を出す場合 SELECT Count([A]) AS Aの件数,(SELECT count([B]) FROM テーブル1 where [B]>0) AS Bの件数,(SELECT count([C]) FROM テーブル1 where [C]>0) AS Cの件数 FROM テーブル1 WHERE A>0 これは、Aの件数を表示する SELECT Count([A]) AS Aの件数 FROM テーブル1 に、 SELECT count([B]) FROM テーブル1 SELECT count([C]) FROM テーブル1 も一緒に表示させたみたいなのです。 必要に応じてwhere条件を変えてください。

groovyreality
質問者

お礼

ありがとうございます。 いろいろ試してみます。

関連するQ&A

  • ACCESS2003単純計算方法

    ACCESSの質問お願いいたします。 ACCESS初心者です。 テーブルにA、B、C、Dの項目を作成し テーブルDにA-BやB-Cなどの計算を実行して Dのテーブルに代入する方法を教えてください。 クエリを使う課と思いますが、記述式は テーブル名でしょうか? よろしくお願いします。

  • Access2000 の更新クエリでカウントアップ

    初歩的なことだと思うのですが、 Access2000を利用し、 あるテーブルのAというキーのレコードの数値項目2つを、 更新クエリを動作させるたびに、1づつカウントアップさせたいのですが、 どのように記述するのでしょうか? キー項目 項目1 項目2 タイムスタンプ A     0   1  2007・・。 ここで、更新クエリを起動して、 A     1   2  2007・・・ ここで更新クエリを起動して A     2   3  2007・・・ 更新クエリのレコードの更新欄にはどのように記述すれば、正しく動作するかお教えください。 (タイムスタンプは、Now()を設定しています) 宜しくお願いします。

  • accessでチェックされたもをカウントしたいんですが

    Access2000にて次のようなデータベースを作成しています。 おそらく非常に初歩的な質問だと思うのですが、全くの素人のため困っています。 バカバカしいなどと言わずにどうかご教授願います。。。 ----------------------- No グループ名  分類1  分類2  分類3 1  グループA   レ    レ    レ 2  グループB             レ 3  グループB   レ         レ 4  グループB        レ    レ 5  グループC   レ 6  グループC   レ         レ ----------------------- 分類1~3はチェックボックスで入力されています。 このデータを元に、それぞれ分類1~3に属するデータの数をカウントしたいのです。 レポートの記述でどのようにすればチェックの入ったものだけをカウントできる のでしょうか。 目的は上のテーブルを次のような表にすることです。 -------------------- グループ名  分類1  分類2  分類3 グループA   1    1    1 グループB   1    1    3 グループC   2    0    1 ──────────────────── グループ計   4    2    5 -------------------- どうかよろしくおねがいします。

  • Access97でデータのカウント

    Access97のお話です。 アルファベット26文字がランダムに並んでいるテーブルがあるとします。 ここで「A」は上から数えて何番目にあるか?、 というクエリーを作成したいのですが・・・ テーブル C B D A クエリー 「A」は「4」番目

  • Accessのレポート上での計算

    現在4つのフィールドで=DCountを使ってリストの個数を返すクエリを組みました。 それをレポートで表示したのですが、この各フィールドの個数を合計したいんです。 テーブルB | A | B | C | D | ←このA~Dにはコンボボックスでタイプが入っています。 これから クエリ 式1:=DCount("*","テーブルB","[A]='タイプ1'") クエリを実行すると 1      式2:=DCount("*","テーブルB","[A]='タイプ2'")  クエリを実行すると 0      式3:=DCount("*","テーブルB","[A]='タイプ3'")  クエリを実行すると 1 が表示 といったようにクエリで選ばれている個数を算出しています。 このクエリを使ってレポートを作ったのですが、 レポートフッターに =Sum([式1]+[式2]+[式3]) という式を入れてレポートを表示すると 「101」と返ってきてしまいます(表示されている数字が順番にならんでる)。 目的としては「2」にしたいのですが、式が違うのでしょうか? 初心者バリバリの質問で申しわけありませんが、ご教授いただけますようお願いいたします。

  • 【Access2007】クエリを教えてください

    Access2007を使用しています。 以下のような3つのテーブルがあります。 テーブルA No    項目a 1     ○ 2     ○ 3     ○ 5     ○ テーブルB No    項目b 1     ○ 4     ○ 5     ○ テーブルC No    項目c 1     ○ 2     ○ 4     ○ 6     ○ これらの3つのテーブルから以下の結果を返すクエリはどうすればいいのでしょうか? No    項目A   項目B   項目C 1     ○     ○     ○ 2     ○            ○ 3     ○ 4            ○     ○ 5     ○     ○ 6                  ○

  • ACCESS2000でDCount関数の使い方

    ACCESS2000で更新クエリの質問です。 先日同様の質問をさせていただきましたが、その後うまくできないところがあったので再度質問させていただきました。 内容は、フィールドの値のカウントを集計し、更新クエリを使用してデータを更新するという内容です。 前回の質問でDCount関数を用いて下記のとおり実行するとできるとのことでしたが、条件が複数ある場合どのように記述すれば いいのかを教えて下さい。 条件は、 (1)年月 =Aテーブル.年月 (2)コード=Aテーブル.コード (3)区分 =Aテーブル.区分 <こんな感じで実行しようとしたのですがうまく動きません> UPDATE Bテーブル SET" カウント数1 = DCount('区分','Aテーブル','[A年月]=[B年月] And [Aコード]=[Bコード] And [A区分]='001'') カウント数2 = DCount('区分','Aテーブル','[A年月]=[B年月] And [Aコード]=[Bコード] And [A区分]='002'') やりたいことは下記のとおりです。Aテーブルを集計しBテーブルの個数にAテーブルの個数の合計値を更新する。 <Aテーブル> A年月  Aコード A区分      200807  9991   001 200807  9991   001 200807  9991   001 200807  9991   002 200807  9991   002 <Bテーブル> B年月  Bコード Bカウント数1  Bカウント数2 200807  9991        0       0 ↓↓↓更新後 <結果:Bテーブル>   B年月  Bコード Bカウント数1  Bカウント数2 200807  9991        3       2              ↑       ↑    (Aテーブルの区分='001'  (Aテーブルの区分='002'     を集計した結果)       を集計した結果)

  • ACCESSについて

    Accessで以下のように処理したいのですが、方法を教えてください。 下記のように2つのテーブル1、2があり、それぞれ一つずつの項目(A、B)があります。 テーブル1  テーブル2  項目A    項目B  001     002  002     004  005     006  006     007  008     008 これをクエリーを使って、 クエリー0  テーブル1.項目A  テーブル2.項目B     001     002        002               004     005     006        006               007     008        008 と表示させたいのですが、どうしたらいいでしょうか?

  • Accessで計算値を項目へセットする方法。

    こんにちは。 非常に初歩的な質問で申し訳け御座いません。 Accessで計算値を項目へセットする方法についてお伺い致します。 A,B,Cのテーブル項目があったとして、フォームからA,Bへ入力した値をA*Bを計算してCへセットする場合に、これを実現できる方法(手段)を知りたいと思います。 マクロとVBAでは可能と思いますが、こちらの方法は除外しまして式ビルダを使って可能なのでしょうか。 (実は前から漠然と出来ると思っていたのですが、出来ないような気がしてきました。私の勘違いのではと思っています。) Accessのご経験豊富な方のご意見を宜しくお願い致します。

  • アクセス2007の単票レポートの各項目の配置変え

    Windows7をベースにアクセス2007を使っています。ごく最近まで、旧バージョンを使っていた際には、クエリーで得た検索結果をベースに、レポート(単票)にまとめる際、各項目ごとに配置や表示されるマスの大きさを変更できていたのが、選択したクエリーをベースに「レポートウィザード」で作ると、全ての項目が一斉に位置変更してしまい、個別に配置位置変更できなくなりました。  どうしたら個別に配置位置変更できるのかお教えください。 詳細説明: 「A項目  ↓」 「B項目  ↓」 「C項目  ↓」 の状態から 「A項目↓」  「B項目        ↓」 「C項目               ↓」 ※↓はマスの最後 としたいが、マウスでドラック&ドローすると 「A項目       ↓」 「B項目       ↓」 「C項目       ↓」 や 「A項目↓」 「B項目↓」 「C項目↓」 と一斉に↓の配置が動いてしまう。

専門家に質問してみよう