#424 オープン済みレコードセットをソートする方法 VBA

テーブルに保存されたデータを並べ替えてVBA上で取得したい場合、あらかじめクエリとしてそれを用意しておき、そのクエリからレコードセットを作る方法があります。一方、RecordsetオブジェクトのSortプロパティを使うと、すでに読み込まれているレコードセットにソートを掛け、その結果を別のレコードセットとして取得することができます。
1つのテーブルからいくつかの基準で並べ替えを行い、それぞれについて一括してレコード処理するような場合、この方法を使うことによって、並べ替えの種類の数だけのクエリを作らなくて済みます。


次のプログラム例では、まず「得意先」テーブルを元とするレコードセットを開き、そこから「得意先コード」で並べ替えたレコードセット、続いて「フリガナ」で並べ替えたレコードセットを順番に生成し、それぞれを読み込んでイミディエイトウィンドウに出力しています。

なお、RecordsetオブジェクトのSortプロパティを扱うためにはダイナセットまたはスナップショットでレコードセットを開く必要があります。ただし、下記サンプルのように、SQL文やクエリを指定した場合には自動的にダイナセットとなりますので、OpenRecordsetメソッドの第2引数の指定は省略できます。

Dim dbs As Database
Dim rst As Recordset
Dim rsts As Recordset

Set dbs = CurrentDb

'まずテーブル全体のレコードセットを開きます
Set rst = dbs.OpenRecordset("SELECT * FROM 得意先 WHERE 都道府県='東京都'")

'レコードセットを得意先コードでソートします
rst.Sort = "得意先コード"
'ソートされたレコードセットから新しいレコードセットを生成します
Set rsts = rst.OpenRecordset
With rsts
  Do Until .EOF
    Debug.Print !得意先コード, !フリガナ
    .MoveNext
  Loop
  .Close
End With

Debug.Print "***************************"

'今度はフリガナでソートします
rst.Sort = "フリガナ"
Set rsts = rst.OpenRecordset
With rsts
  Do Until .EOF
    Debug.Print !得意先コード, !フリガナ
    .MoveNext
  Loop
  .Close
End With

rst.Close


実行結果:
実行結果
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved