SBMJOB
VBAでSQLのCount関数を使って選択したレコード数を表示するサンプルをご紹介します。
目次
概要
画面上部の三つのリストボックスは左から「大分類」「中分類」「小分類」三つのカテゴリーの選択が可能になっています。
「検索されたレコード数は?」ボタンを押すとSQLでデータを検索しレコード数をメッセージボックスに表示します。
「検索されたレコード数は?」ボタンコード
ポイントはVBAのSQLでlikeするときは”%”を使うところです。クエリでは”*”がワイルドカードですが、VBAではこの点が違います。
もちろんSQLでCountを使ってレコード合計数を取得しています。
Private Sub cmd計算_Click()
Dim myCn As ADODB.Connection 'ADOコネクションオブジェクト
Dim myRs As ADODB.Recordset 'ADOレコードセットオブジェクト
Dim strSQL As String 'SQL文用文字列
'現在のデータベースへ接続
Set myCn = CurrentProject.Connection
'ADOレコードセットのインスタンス作成
Set myRs = New ADODB.Recordset
myRs.CursorLocation = adUseClient
Dim stringDai As String
Dim stringCyuu As String
Dim stringSyou As String
Dim recordCount As Integer
If IsNull(Me.cb大分類) Then
stringDai = "%"
Else
stringDai = Me.cb大分類
End If
If IsNull(Me.cb中分類) Then
stringCyuu = "%"
Else
stringCyuu = Me.cb中分類
End If
If IsNull(Me.cb小分類) Then
stringSyou = "%"
Else
stringSyou = Me.cb小分類
End If
'SQL文
strSQL = "SELECT Count(商品マスター.ID) as カウント数"
strSQL = strSQL & " FROM 商品マスター"
strSQL = strSQL & " WHERE 大分類 LIKE '" & stringDai & "' AND"
strSQL = strSQL & " 中分類 LIKE '" & stringCyuu & "' AND"
strSQL = strSQL & " 小分類 LIKE '" & stringSyou & "'"
strSQL = strSQL & " ;"
'レコードセット取得・・・(※1)
myRs.Open strSQL, myCn, adOpenKeyset, adLockReadOnly
myRs.MoveFirst
recordCount = myRs.Fields("カウント数")
MsgBox "選択したレコードすうは!" & recordCount, vbOKOnly + vbInformation
'オブジェクトの開放
Set myRs = Nothing: Close
Set myCn = Nothing: Close
End Sub
まとめ
この記事ではSQLのCount関数を使って該当するレコード数を取得しています。他の方法としては画面にセットしているレコードセットのレコード数をプロパティーから取得してレコード数とすることもできます。しかしVBAに明示的にSQLを書いた方が後のメンテナンス性は良いと思われます。簡単な紹介でしたが今後この記事はリライトしていこうと思っています。
コメント