簡易的なシステムを構築する際は、Accessのオートナンバー機能を使って、自動的に連番を採番できるため便利ですよね。
ところが、連番を1から振り直したい場合には、オートナンバーをリセット(初期化)する必要があります。
手動でのリセット(初期化)は簡単にできたのですが、AccessのVBAを使って自動的にリセット(初期化)をする方法で意外とハマりましたので、対処方法・解決策をメモします。
関数を作成しましたので、コピーしてご利用ください。
クリックできる目次
オートナンバーを手動でリセット(初期化)する方法
まずは、手動でリセット(初期化)する方法を簡単に紹介します。
この方法は、ググってみると多くの情報がヒットしましたので、ほとんどの方が知っているかもしれません。
これだけですね。
まぁ、デバッグ時なんかはこれでもよいかもしれませんが、自動化システムとしては使い物になりませんよね。
ということで、いろいろと調べた結果、VBAでDAOを使ってオートナンバーを初期化できることが判明しましたので、実装方法をご紹介します。
オートナンバーを自動でリセット(初期化)する方法
VBAでオートナンバーをリセットする関数
「strTableNameにテーブル名」を「strFieldNameにカラム名(オートナンバー)」を渡して、関数を実行するだけでOKです。
' オートナンバーリセット Private Sub AutoNumberReset(ByVal strTableName As String, ByVal strFieldName As String) Dim db As DAO.Database Dim strSQL As String Set db = CurrentDb strSQL = "ALTER TABLE " & strTableName & " ALTER COLUMN " & strFieldName & " COUNTER (1,1)" db.Execute strSQL End Sub
処理の流れ
以下の流れで、コードを記述してください。
- テーブルのレコード削除
- AutoNumberReset関数実行
- テーブルにレコード追記
例えば、
①VBAで削除クエリを実行して、テーブルのレコードを全て削除した後、②AutoNumberReset関数を使って、オートナンバーをリセットし、③追加クエリを実行してテーブルにレコードを追加する(このときオートナンバーは1から採番される)
ような使い方が想定されますね。
まとめ
今回は、AccessのVBAを使って自動的にリセット(初期化)をする方法をご紹介しました。
前項で紹介した関数を使用すれば、簡単にオートナンバーをリセット(初期化)することが可能ですので、簡易的な自動化システムを構築するときは、とても便利です。
ぜひ使ってみてくださいね。
1 件のコメント
AutoNumberResetのソースを選択してコピーしようとすると
「コピーできません」
ではねられてしまいました。
短いコーディングなので
手打ちしました。
ご紹介ありがとうございます。
とてもお役に立ちました。