レコード数をカウントする方法 (DAO)

  特定のテーブル、クエリ、レコードセットのレコード数を、RecortCountプロ
パティを使用してカウントする方法を説明します。

● 準備 ●

(1) 以下の構成で[商品マスタ]テーブルを作成します。
    ----------------------------------------
    フィールド名        データ型
    商品ID              整数型(主キー)
    商品名              テキスト型
    販売価格            通貨型
    ----------------------------------------

(2) テーブルに適当なデータを入力しておきます。下記を参考にして下さい。

      

(3) 新規標準モジュールを作成し、以下のプロシージャを記述して下さい。

● サンプル ●

Private Sub RecCount()
    '■ 初期設定 ■
    Dim iCnt   As Integer         'レコード件数
    Dim Rst    As DAO.Recordset   'レコードセット
    Dim strSQL As String


    '■ レコードセットでカウント ■
    Debug.Print vbCrLf & "【レコードセットでカウント】"

    Set Rst = CurrentDb.OpenRecordset("商品マスタ", dbOpenSnapshot)
    Rst.MoveLast

    iCnt = Rst.RecordCount
    Debug.Print "商品マスタのレコード件数は " & iCnt & "件 です"

    'Filterプロパティを設定し、500円以上のものを抽出
    Rst.Filter = "販売価格 >= 500"
    Set Rst = Rst.OpenRecordset
    Rst.MoveLast

    iCnt = Rst.RecordCount
    Debug.Print "販売価格500円以上の商品は " & iCnt & "件 です"


    '■ 終了処理 ■
    Rst.Close
    Set Rst = Nothing
End Sub


● 動作確認 ●

  上記サンプルプロシージャを実行し、以下の文がイミディエイトウィンドウ
に表示されていることを確認して下さい。

----------------------------------------
【レコードセットでカウント】
商品マスタのレコード件数は 11件 です
販売価格500円以上の商品は 3件 です
----------------------------------------


● 詳細 ●

・RecordCountプロパティ
  レコードセットを作成し、RecordCountプロパティを参照することでレコード
数をカウントしています。サンプルではデータを参照するだけなので、SnapShot
タイプのレコードセットを作成しています。DynasetとSnapShotタイプのレコー
ドセットのRecordCountプロパティは、実際に読み込んだレコード数を返します
ので、「Rst.MoveLast」とレコードの最後まで強制的に読み込ませています。
Tableタイプのレコードセットでは、この作業は必要ありません。
  また、前方スクロールタイプのレコードセットは、常にカレントレコードの
みを参照しますので、複数レコードが存在することが前提になっている
RecordCountプロパティは正しい結果を返しません。

 さらに、Access2000限定になりますが、ADOを使ってレコードセットを作成す
る場合も同じような注意が必要です。ADOではDAOのRecordSetTypeと同じ意味合
いのプロパティがCursorTypeです。詳細はヘルプを参照して下さい。

  RecordCountのように複数のレコードを参照したり、レコードの内容を書き換
える処理を行う際には、このRecordSetTypeは非常に重要になりますので、注意
して考える習慣を持つようにして下さい。

  続いて、レコードセットのデータを抽出するためにFilterプロパティを使用
しています。レコードセットに直接フィルタを掛ける場合、サンプル中にある
ようにレコードセットのFilterプロパティに値を代入した後に、同じレコード
セットを開きなおす必要があります。



● 補足説明 ●

  Access2000の場合、デフォルトではDAOに参照設定されていません。
  Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、
Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。
  その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOの
チェックを持ってきて下さい。

Access97/2000



戻る


Excel Word Access VBA! モーグ