ACCESS VBA DoCmd.GoToRecordでレコードを移動する方法

DoCmd.GoToRecordでレコードを移動する方法

ACCESSのフォームでレコードを移動する際に利用するのが、DoCmd.GoToRecordです。

このメソッドを利用すると、自由にフォームを移動することができます。

今回は、DoCmd.GoToRecordでレコードを移動する方法をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

DoCmd.GoToRecordの構文

DoCmd.GoToRecordは以下の構文で利用します。

DoCmd.GoToRecord ( オブジェクトタイプ , オブジェクト名 , 移動先のレコード指定 , Offset )

引数は4つありますが、省略可能ですので利用するのは3つめの引数だけで十分でしょう。

3つ目の「移動先のレコード指定」に利用できる値は以下の通りです。

名前説明
acFirst先頭のレコードに移動する
acGoTo指定したレコードに移動する
acLast最後のレコードに移動する
acNewRec新規レコードに移動する
acNext次のレコードに移動する
acPrevious一つ前のレコードに移動する

なお、既定値はacNextですので特に何も指定しない場合は次のレコードに移動します。

acGoToの指定方法

DoCmd.GoToRecordは比較的わかりやすいメソッドで、引数の設定も簡単です。
ただし、acGoToだけは利用方法に注意が必要でしょう。

acGoToはどのレコードに移動するかを指定できます。
以下のように記述します。


 DoCmd.GoToRecord , , acGoTo, 5

この例でいうと最後の引数に指定した5のレコードに移動します。

ただし、この指定はレコードソースになっているテーブルやクエリのレコードを最初から数えていった順番での指定しかできません。
特定のフィールドの特定の値を指定して移動させることはできませんのでご注意ください。

上記の例でいうと単純にフォームのレコードソースになっているテーブルの5番目のレコードに移動します。

DoCmd.GoToRecordの利用例

もう少し具体的に説明するために、実際にDoCmd.GoToRecordを使ったフォームの移動例を紹介します。

以下のフォームを作成しました。

移動ボタンを押すことでレコードを移動できます。

このフォームのレコードソースは以下のテーブルです。

テーブルの内容を単票形式(1レコードごとにフォーム表示)するレイアウトになっています。

フォームをデザインビューで見ると以下の通りです。

移動ボタンのクリック時にイベントプロシージャを設定しています。

イベントプロシージャの内容は以下の通りです。


 Private Sub 移動_ボタン_Click()

    DoCmd.GoToRecord , , acGoTo, 5

 End Sub

DoCmd.GoToRecordを使って、5つ目のレコードに移動しています。

実際にフォーム上で移動ボタンを押してみましょう。

下の方を見ていただくとわかりますが、5レコード目に移動していますね。

このテーブルは主キーが売上IDですが、たまたま5レコード目の売上IDが5でした。

ここで少しプロシージャを変更して7レコード目に移動させてみます。
変更後のプロシージャを示します。


 Private Sub 移動_ボタン_Click()

    DoCmd.GoToRecord , , acGoTo, 7

 End Sub

すると結果は以下のようになります。

下段を見ると7レコード目に移動できていることが分かります。

ただ、売上IDは8ですね。
これはレコードソースのテーブルで売上ID7番が欠番になっているためです。

このように、DoCmd.GoToRecordのacGoToでのレコード移動は単純にレコードソースにしたテーブルやクエリを先頭から数えた順番のレコードを表示します。
実務では、実際に参照したいレコードをテーブル上での並びで認識することはあまりないので、DoCmd.GoToRecordのacGoTo利用することはあまりないと言えるでしょう。

特定のレコードを指定してフォームを開く際は、むしろDoCmd.OpenFormのwhere引数を指定するほうが使いやすいでしょう。

DoCmd.OpenFormを使った特定レコードの開きからは以下の記事に記載していますのでご参照ください。

一覧フォームから詳細フォームを開く方法

以上、DoCmd.GoToRecordでレコードを移動する方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。