●概要●
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つ目のメッセージダイアログ
- 「部署」ごとのレコード件数 →[イミディエイト]ウィンドウ
に表示されます。