Accessのオートナンバーについてお探しですね。
広告
Accessのオートナンバー型を1からリセット・振り直しする方法【初心者向け】
Accessでテーブルを作るとき、主キーに「オートナンバー型」を使うことってよくありますよね。
自動で番号が振られるのでとても便利なのですが、レコードを削除したら番号が飛び飛びになってしまったり、テストで入れたデータを消しても番号が1に戻らなかったりして、「あれ?」と戸惑った経験がある人も多いのではないでしょうか。
この記事では、Accessのオートナンバー型の基本的な仕組みと、番号をリセットしたり振り直したりする方法を、初心者の方にも分かりやすく解説していきます。
1. オートナンバー型って何?まずは基本を理解しよう
オートナンバー型というのは、新しいレコードを追加したときにAccessが自動的に番号を割り振ってくれるデータ型のことです。
顧客ID、商品ID、売上IDなど、それぞれのレコードを区別するための主キーとしてよく使われています。
自分でいちいち番号を入力しなくていいし、番号が重複する心配もないので、テーブルを作るときにはとても便利な機能です。
ただし、ここで大事なポイントがあります。
オートナンバー型の本当の目的は「見た目がきれいな連番を作ること」ではなく、「それぞれのレコードを区別できるようにすること」なんです。
この考え方を理解しておくと、番号が飛び飛びになっても必要以上に心配しなくて済みますよ。
削除しても番号は再利用されない
オートナンバー型には大切な特徴があります。
それは、一度使った番号は二度と使われないということです。
たとえば、IDが1から10まであるテーブルで、ID5のレコードを削除したとします。
そうすると、次に追加されるレコードは5ではなく11になります。
入力の途中で「やっぱりやめた」とキャンセルした場合も、番号だけが消費されて歯抜けになることがあります。
これは不具合ではなく、Accessの仕様なんです。
データの一意性(唯一性)を保つための仕組みなので、心配しなくて大丈夫です。
連番にならない場合は設定を確認
もし1、2、3のような連番にならない場合は、テーブルのデザインビューでオートナンバー型フィールドの設定を確認してみましょう。
– 「新規レコードの値」が「ランダム」になっていないか
– フィールドサイズが「レプリケーションID」になっていないか
これらの設定になっていると、そもそも連番にはなりません。
外部に見せる番号としては使わない方がいい
業務システムを作るときに注意したいのが、オートナンバー型の値を請求書番号や伝票番号のように、外部に見せる番号として使ってしまうケースです。
削除や取り消しで欠番が出るので、「必ず連続した番号でなければいけない」という用途には向いていません。
そういう番号が必要な場合は、オートナンバー型とは別に、採番用のテーブルやVBAで管理する番号フィールドを用意する方が安全です。
オートナンバー型は内部管理用のID、表示用の番号は別のフィールドと考えると、Accessのテーブル設計がうまくいきやすくなりますよ。
2. 番号をリセットする前に必ず確認しておくこと
オートナンバー型の番号をリセットしたくなる場面は、主に次のような時です。
– テスト入力したデータを全部削除して、本番運用を始めるとき
– データを取り込み直すために、テーブルを空にして再登録するとき
こういった「テーブルの中身を全部削除して、次の入力を1から始めたい」というケースなら、比較的簡単な方法で対応できます。
既存データがある場合は要注意
一方、すでに本番データが入っている状態で、途中の欠番を詰めて既存レコードのIDを振り直したい場合は注意が必要です。
特に気をつけたいのが、そのIDが他のテーブルとリレーションシップで結ばれている場合です。
番号を変えることで、関連データとのつながりが壊れてしまう可能性があります。
たとえば、顧客テーブルの顧客IDを受注テーブルが参照している状態で、顧客IDを振り直すと、受注データがどの顧客に紐づくのか分からなくなってしまいます。
参照整合性を設定していれば、Access側で変更や削除を止めてくれることもありますが、無理にテーブルを作り替えると、フォーム、クエリ、レポート、VBAの処理にも影響が出てしまいます。
番号をきれいにすることよりも、データの整合性を守ることを優先しましょう。
必ずバックアップを取る
作業を始める前に、必ずAccessファイル全体のバックアップを取ってください。
オートナンバー型のリセットや振り直しは、テーブルの構造やデータそのものに関わる操作です。
特に、テーブルをコピーして作り直す方法や追加クエリを使う方法では、操作を間違えると元のデータを失ってしまう可能性があります。
また、複数人で共有しているAccessデータベースの場合は、他のユーザーが開いていない状態で作業することも大切です。
作業中に別のユーザーがデータを追加すると、採番やリレーションに予期しない影響が出ることがあります。
安全に進めるためには、次の3つをセットで行うのが基本です。
1. バックアップを取る
2. 他のユーザーが使っていない状態にする
3. 影響範囲を確認する
3. 全部削除してオートナンバーを1からリセットする方法
テーブルの中身を全部削除したうえで、次に追加するレコードのオートナンバーを1から始めたい場合は、「データベースの最適化/修復」を実行する方法がよく使われます。
手順
1. 対象テーブルのレコードを全部削除する
2. Accessのリボンから「データベースツール」タブを開く
3. 「データベースの最適化/修復」を実行する
これで、空になったテーブルのオートナンバーのカウンターがリセットされて、次に追加するレコードが1から採番されるようになります。
テストデータを消して本番データを登録し直すような場面では、この方法が一番分かりやすいでしょう。
注意点
この方法でリセットできるのは、基本的に対象テーブルが空っぽになっている場合だけです。
レコードが残っている状態で最適化/修復を実行しても、既存レコードの番号が自動的に振り直されるわけではありません。
また、削除したレコードを元に戻すことはできないので、削除前に必要なデータがないかを必ず確認しておきましょう。
大量のデータを削除した後は、Accessファイルのサイズが大きいまま残ることがありますが、最適化/修復を実行すると不要な領域が整理されて、ファイルサイズも改善されます。
オートナンバーのリセットと同時にデータベースのメンテナンスができるのも、この方法の良いところです。
VBAで自動化する方法も
VBAで処理を自動化したい場合は、SQLのALTER TABLE文でオートナンバー型のカウンターを指定し直す方法もあります。
たとえば、対象テーブルが「T_サンプル」、オートナンバー型フィールドが「ID」の場合、次のようなSQLを実行します。
“`sql
ALTER TABLE [T_サンプル] ALTER COLUMN [ID] COUNTER(1,1)
“`
COUNTERの括弧内は「開始値, 増分」を表していて、COUNTER(1,1)なら1から始まって1ずつ増える設定になります。
ただし、この方法も既存データやリレーションの状態によっては期待どおりに動かないことがあるので、実行前にバックアップを取って、テスト用のコピーで動作確認してから本番ファイルに適用するのが安全です。
4. 既存レコードの欠番を詰めて番号を振り直す方法
既存のレコードを残したまま欠番を詰めたい場合は、元のテーブルを直接書き換えるのではなく、同じ構造の新しいテーブルを作って、オートナンバー型フィールド以外のデータを追加する方法が基本です。
手順
1. 対象テーブルをナビゲーションウィンドウでコピーする
2. 貼り付け時に「テーブル構造のみ」を選択する
3. 元テーブルからオートナンバー型フィールドを除いた各フィールドのデータを、新しいテーブルへ追加する
新しいテーブルではレコード追加時にオートナンバーが改めて採番されるので、1から順に番号を振り直すことができます。
データを追加する方法
データを追加する方法には、いくつかのやり方があります。
**手動コピー**
少量のデータなら、元テーブルを開いてオートナンバー型以外の列をコピーし、新テーブルの対応する列へ貼り付ける方法でも大丈夫です。
**追加クエリ**
件数が多い場合や繰り返し作業が発生する場合は、追加クエリを作成して実行する方が確実です。
追加クエリでは、元テーブルを基にしてオートナンバー型以外のフィールドだけを選び、追加先として新しいテーブルを指定します。
**Excelから取り込み**
Excelから取り込み直す場合も、オートナンバー型の列を含めずにインポートすれば、Access側で新しい番号が自動的に付けられます。
振り直し後の注意点
振り直し後に新しいテーブルを元のテーブルとして使う場合は、次のような点を確認する必要があります。
– テーブル名
– リレーションシップ
– クエリ、フォーム、レポート、VBAの参照先
元テーブルを削除して、新テーブルの名前を元と同じ名前に変更すれば、既存のオブジェクトから参照しやすくなります。
ただし、リレーションシップやインデックス、主キー設定が完全に引き継がれているかは必ず確認してください。
特に、他のテーブルが元のIDを参照している場合、番号の振り直しによって関連付けが崩れてしまう可能性があります。
単独のマスタや一時取込テーブルなら振り直しやすいですが、実運用中の基幹データでは安易に行わない方が安全です。
デザインビューでの振り直しはリスクあり
なお、Accessではデザインビューでオートナンバー型フィールドを切り取って貼り付けることで、既存レコードの番号を振り直せる場合もあります。
でも、テーブル構造やバージョン、リレーションの状態によってはリスクがあります。
操作としては手軽に見えても、主キーの再作成に近い処理になるので、本番データでいきなり実行するのは避けましょう。
そもそも欠番をなくす必要があるか考えよう
どうしても欠番をなくしたい場合は、「なぜ欠番をなくす必要があるのか」を先に整理することが大切です。
Accessの内部IDとして使うだけなら、欠番は全く問題ありません。
見た目の連番が必要なだけなら、クエリで表示用の連番を作ったり、別の採番フィールドを設計したりする方が、長期的には安全で保守しやすい方法です。
まとめ
オートナンバー型は便利な機能ですが、その仕組みを理解して正しく使うことが大切です。
この記事が、Accessのテーブル設計やデータ管理のお役に立てれば嬉しいです。
広告
