【Access VBA】EOFの使い方とは?MoveNextとの関係を実例付きで解説

Access VBAでレコード処理を学び始めると、rs.EOFというコードをよく見かけます。

ただ、初心者だと、

  • EOFって何?
  • なぜ必要なの?
  • MoveNextと何が関係あるの?

と迷いやすい部分です。

EOFは、「レコードの最後まで到達したか」を判定するためのものです。

この記事では、EOFの使い方とMoveNextとの関係を実例付きで解説します。

目次

Access VBAのEOFとは

EOFとは、End Of Fileの略です。

Access VBAでは、「最後のレコードを超えたか」を判定するときに使います。

主にRecordsetと一緒に使用されます。

Recordsetとは?

Recordsetとは、テーブルやクエリのデータをVBAで操作するための仕組みです。

たとえば、社員テーブルのデータを1件ずつ読み込む場合に使います。

EOFがTrueになるタイミング

EOFは、最後のレコードを超えるとTrueになります。

状態EOFの値
まだレコードがあるFalse
最後まで到達したTrue

つまりEOF = Falseなら、まだ次のレコードが存在します。

逆にEOF = Trueなら、データの最後まで処理済みという意味になります。

EOFの基本的な使い方

EOFは、繰り返し処理で非常によく使われます。

代表的なのが、次のVBAです。

Do Until rs.EOF

基本サンプル

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("T_社員")

Do Until rs.EOF
   Debug.Print rs!社員名
   rs.MoveNext
Loop

rs.Close

コード全体の目的

T_社員テーブルの社員名を、1件ずつ順番に表示する処理です。

1行ずつ解説

Dim rs As DAO.Recordset

レコードセット用の変数を定義しています。

Set rs = CurrentDb.OpenRecordset("T_社員")

T_社員テーブルを開いています。

Do Until rs.EOF

EOFがTrueになるまで繰り返します。

つまり、最後のレコードまで処理するという意味です。

Debug.Print rs!社員名

現在レコードの社員名を表示しています。

rs.MoveNext

次のレコードへ移動しています。これが非常に重要です。

Do Until rs.EOFの意味

初心者が最も混乱しやすいのが、

Do Until rs.EOF

の意味です。

これは、EOFがTrueになるまで繰り返すという意味になります。

つまり、

  • まだレコードがある → ループ継続
  • 最後まで到達した → ループ終了

という流れです。

イメージすると理解しやすい

たとえば、社員データが3件あるとします。

社員ID社員名
1田中
2佐藤
3鈴木

処理の流れはこうなります。

  1. 田中を処理
  2. 佐藤を処理
  3. 鈴木を処理
  4. 最後を超える
  5. EOF=Trueになる
  6. ループ終了

この仕組みで、全レコードを順番に処理できます。

EOFとMoveNextの関係

EOFを理解するうえで、最重要なのがMoveNextです。

MoveNextとは?

rs.MoveNextは、次のレコードへ移動する命令です。

レコードセット処理では必須になります。

MoveNextを書き忘れると危険

初心者が最も多くやるミスが、MoveNextの書き忘れです。

Do Until rs.EOF
   Debug.Print rs!社員名
Loo

これは非常に危険です。

なぜなら、現在レコードが変わらないため、EOFがTrueになりません。

その結果、同じレコードを永遠に処理し続ける「無限ループ」になります。

実務でも非常に多いミス

実際の業務でも、

  • MoveNext忘れ
  • EOF条件ミス
  • ループ終了条件ミス

は非常によく発生します。

そのため、

Do Until rs.EOF
   処理
   rs.MoveNext
Loop

をセットで覚えるのがおすすめです。

EOFを使うときの注意点

空データにも注意する

レコードが0件の場合、最初からEOF=Trueになります。

つまり、ループ内の処理は1回も実行されません。

そのため、データ件数0件のケースも考慮する必要があります。

BOFとセットで使う場合もある

Access VBAには、BOFも存在します。

これは、「先頭より前」を表します。

実務では、

If rs.EOF Then

のように、データ存在チェックで使われることも多いです。

レコード処理は実務で非常に多い

Access VBAでは、

  • データ出力
  • CSV作成
  • 一括更新
  • 帳票作成
  • データ集計

など、レコードを順番に処理する場面が非常に多くあります。

そのため、EOFはAccess VBAで必須レベルの知識です。

まとめ

EOFは、「最後のレコードまで到達したか」を判定するためのものです。

EOFとセットで重要なのが、rs.MoveNextです。

MoveNextを書き忘れると、無限ループになるため注意しましょう。

まずは小さなテーブルを作って、1件ずつデータを表示する処理から試してみるのがおすすめです。

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次