HOME > 即効テクニック > AccessVBA > クエリ・SQL > グループごとのレコード件数を取得する

即効テクニック

クエリ・SQL

グループごとのレコード件数を取得する

(Access 2000/2002)
●概要●
COUNT関数を使用して指定したフィールドがNULL値でないレコードの件数を取得します。フィールドに「*」(アスタリスク)を指定した場合は、NULL値も含めたレコードの件数を取得します。GROUP BY句と一緒にCOUNT関数を使用すると、グループごとのレコードの件数を取得できます。
サンプルでは3つのSELECTステートメントで、「社員テーブル」のすべてのレコード件数、「職種」がNULL値でないレコード件数、および「部署」ごとのレコード件数を検索します。
●サンプル●
'グループごとのレコード件数を取得する
Public Sub Sample()

    Dim myDB As Database
    Dim myRS As DAO.Recordset
    Dim mySQL1, mySQL2 As String

    'SQLステートメントを定義する
    mySQL1 = "SELECT COUNT(*) FROM 社員テーブル ;"
    mySQL2 = "SELECT COUNT(職種) FROM 社員テーブル ;"
    mySQL3 = "SELECT 部署コード,COUNT(社員コード) FROM 社員テーブル " & _
             "GROUP BY 部署コード;"

    'カレントデータベースを変数に代入する
    Set myDB = CurrentDb
    'mySQL1のSQLステートメントを実行してレコードセットを開く
    Set myRS = myDB.OpenRecordset(mySQL1, dbOpenDynaset)
    '[社員テーブル]のレコード件数を表示する
    MsgBox "社員テーブルのレコード件数は " & myRS(0) & " 件です"
    'mySQL2のSQLステートメントを実行してレコードセットを開く
    Set myRS = myDB.OpenRecordset(mySQL2, dbOpenDynaset)
    '[社員テーブル]の[職種]がNULL値でないレコード件数を表示する
    MsgBox "職種がNULL値でないレコード件数は " & myRS(0) & " 件です"
    'mySQL3のSQLステートメントを実行してレコードセットを開く
    Set myRS = myDB.OpenRecordset(mySQL3, dbOpenDynaset)
    '[部署コード]ごとのレコード件数を表示する
    Do Until myRS.EOF
        Debug.Print "部署コード: " & myRS(0) & "  " & myRS(1) & "人"
        myRS.MoveNext
    Loop
    'レコードセットを閉じる
    myRS.Close

End Sub
● 補足 ●
結果は、
  • 「社員テーブル」のすべてのレコード件数 → 1つ目のメッセージダイアログ
  • 「職種」がNULL値でないレコード件数 → 2つ目のメッセージダイアログ
  • 「部署」ごとのレコード件数 →[イミディエイト]ウィンドウ
に表示されます。