#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'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします
 

Copyright © T'sWare All rights reserved