#419 レコードセットからランダムな1レコードを取り出す方法 VBA

RecordsetオブジェクトのAbsolutePositionプロパティを使うと、指定したレコード番号に移動することができます(ここでいうレコード番号とは、オートナンバーなどデータの値ではなく、データシート上の行番号にあたるものです)。

そして、RandomizeステートメントRnd関数を組み合わせて、レコードセットの「1レコード〜総レコード数」の中からランダムな1つのレコード番号を取得し、そのレコード番号にAbsolutePositionプロパティで移動することによって、ランダムな1レコードを取り出すことができます。

次の例では、得意先テーブルからランダムな1レコードを取り出しています。

  Dim dbs As Database
  Dim rst As Recordset
  Dim lngRecMax As Long
  Dim lngCurRec As Long

  Set dbs = CurrentDb

  'AbsolutePositionプロパティを使う場合は、ダイナセットまたは
  'スナップショットでレコードセットを開きます
  Set rst = dbs.OpenRecordset("得意先", dbOpenDynaset)
  With rst
    'まず総レコード数を取得
    .MoveLast: .MoveFirst
    lngRecMax = .RecordCount
    '乱数によって任意のレコード数の番号を取得
    Randomize Timer
    lngCurRec = Int((lngRecMax * Rnd) + 1)
    'そのレコード番号にカレントレコードを移動
    .AbsolutePosition = lngCurRec - 1
    'レコード内容を出力
    Debug.Print lngCurRec, !得意先コード, !得意先名
    .Close
  End With


何回か実行したあとのイミディエイトウィンドウ:
実行結果
| Index | Prev | Next |



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