質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

1342閲覧

【Access VBA】オートナンバー型の欠番を埋めるVBAについて

netz-eng

総合スコア105

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2022/02/20 07:45

前提・実現したいこと

Microsoft Access初心者です。
Accessでのデータベース作成を学び始めたのですが、レコードを削除すると主キー設定されたIDフィールド(オートナンバー型)に欠番が発生してしまいます。

https://dekiru.net/article/14943/
こちらのサイトを参考に、手動で欠番をなくすことには成功したのですが、
これらの操作をVBAで記述、自動化したいと考えています。

下記コードでテーブルをデザインビューで開くところまではできたのですが、
・オートナンバー型フィールドを切り取り
→再度貼り付け
→主キーに設定
の記述方法がわかりません。
Excel VBAは数年使っていますが、Access VBAは全くの初心者&情報が少なく、困っています。

Access VBAに詳しい方に、オートナンバー型フィールドの欠番埋めの書き方について教えていただきたく思います。

該当のソースコード

VBA

1Private Sub test_AutoNum() 2 3Dim Tbl As String 4 5'テーブルをデザインビューで開く 6Tbl = "test" 7DoCmd.OpenTable Tbl, acViewDesign 8 9 10End Sub

補足情報(FW/ツールのバージョンなど)

Windows11
Access 2021

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/02/20 08:20 編集

> オートナンバー型の欠番を埋める オートナンバーの主キー値はそのテーブルの中で一位にレコードを識別するだけのためのもので、それ以上のものでない、即ち欠番を埋めて連番にするようなことは考えもしないというのが普通だと思います。SELECT する際レコードに連番を振りたいというようことから「欠番を埋める」ということを考えているなら別の手段を考えることをお勧めします。
iruyas

2022/02/20 08:20

そもそも欠番があっては困るものを主キーにしてはいけません。 振り直してもいい主キーなんて存在意義がありません。 ただの連番なら、読み出し時にアプリケーションで附番すれば済むことです。 その主キー、必要ですか?要らないですよね。 ということで、振り直しなんて覚えなくていいです。
netz-eng

2022/02/20 10:28

お二方とも、ご意見ありがとうございます。 主キーの意義を勘違いしていたようです。確かに連番が必要であれば、一覧を読みだしたあと番号を割り振る、でも対応できますね。ありがとうございます。
guest

回答1

0

ベストアンサー

オートナンバー型というのは連番のための機能ではありません。主キーとして使えるユニークなキーを生成するためのものです。
データベースでは、主キーはいったん発行したら変更しないというのが、セオリーです。
主キーは他のテーブルから外部キーとしてリンクされたりしますので、それを変更したら、リンク先の外部キーも同時に変更する必要がでてきます。

もし、連番がどうしても必要なら、主キー(オートナンバー型)ではなく、主キーとは別に連番用のフィールドを追加するのがまともな設計になります。

参照先のように主キーを削除して、また、追加するなどいうのは、データベースとしてはありえません。

投稿2022/02/20 08:15

編集2022/02/20 08:16
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

netz-eng

2022/02/20 10:31

主キーの基本的な役割、設計について教えていただきありがとうございます。 なるほど、主キーはそもそも連番として扱うべきではないんですね。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問