Accessテーブルに行を挿入する方法 表示順の設定と追加手順

概要

この記事の結論
Accessでは、Excelのように任意の行番号へ空行を差し込む操作でデータを管理しません。新しいレコードを追加し、表示順フィールドとクエリの並べ替え条件で、見せたい位置に表示します。この記事では10・20・30の間へ15を入れる具体例、同順位がある場合の第2ソート、フォームで順番が戻る原因、再採番と同時編集の注意点を解説します。主キーを変更せず、登録と並び替えを分けて扱う方法が分かります。

この記事でわかること

  • Accessで途中に行を表示する操作は、新しいレコードを追加し、表示順の値で並べ替えて実現します。
  • 表示順フィールドを用意する
  • 同順位や空欄や番号不足に対処する
  • グループ別表示と複数人編集に対応する

この記事の主な内容

  1. 行の追加と表示位置の変更を分ける
  2. 表示順フィールドを用意する
  3. 新しいレコードを途中に表示する手順
  4. SQLとフォームに同じ並び順を設定する
  5. 同順位や空欄や番号不足に対処する
  6. グループ別表示と複数人編集に対応する
  7. 追加と並べ替えの確認とまとめ
  8. よくある質問

想定読了時間:約15分~20分


1  行の追加と表示位置の変更を分ける

Accessで「途中に行を挿入したい」ときは、新しいレコードを保存する操作と、途中に見せる操作を分けます。Excelのように行番号を押し下げるのではなく、表示順の値を持たせ、クエリやフォームでその値を基準に並べ替えます。商品IDなどの主キーは、そのまま保持します。

テーブルはデータを保存する場所です。画面で今見えている順序を、常に保証された保存順と考えないでください。登録直後に末尾で見えたレコードも、並べ替え条件や再表示によって位置が変わります。安定して同じ順番を再現したいなら、その順序を明示する必要があります。

最初に3つの目的を分ける

したいこと行う操作使う場所
新しい商品を登録新規レコードを追加テーブルまたは入力フォーム
商品一覧の途中へ見せる表示順を設定して並べ替え選択クエリや一覧フォーム
印刷物の途中に余白を入れる帳票の配置やグループを調整レポート

空白行を作って帳票を整えるために、商品名のないレコードを登録するのは避けます。空のレコードもデータとして件数に入り、入力漏れや集計対象と区別しにくくなるためです。表示や印刷のための空間は、フォームやレポートの配置で作ります

レコードの追加とクエリによる表示順の指定を分ける考え方

2  表示順フィールドを用意する

本記事では、練習用の「T_商品」に商品ID、商品名、表示順を持たせます。商品IDが識別、表示順が一覧の位置という分担です。表示順には数値型の長整数を使い、10、20、30のように間隔を空けて入力すると、後から間の整数を使えます。

フィールドデータ型設定と例
商品IDオートナンバー型主キー。既存IDは変えない
商品名短いテキスト例:封筒、用紙、ラベル
表示順数値型の長整数例:10、20、30。必要に応じて必須入力

既存テーブルへ追加する手順

1. データの保存先を含めてバックアップを取り、複製したデータベースで作業します。

2. ナビゲーションウィンドウで対象テーブルを右クリックし、[デザインビュー]を開きます。

3. 空いたフィールド行に「表示順」を追加し、データ型を[数値型]、フィールドサイズを[長整数型]にします。

4. 保存後にデータシートビューへ切り替え、既存の商品へ10、20、30などの値を割り当てます。

5. 空欄や重複の扱いを決め、入力フォームにも表示順の入力欄を用意します。

「表示順」を短いテキストにすると、1、10、2のような文字列順になる場合があります。数字の大小で並べたい項目には数値型を選びます。また、既定値をすべて0にするだけでは、順序を指定したことにはなりません。登録時に誰が値を決めるかも合わせて考えます。

商品ID、商品名、表示順の役割を分けたテーブル設計

3  新しいレコードを途中に表示する手順

表示順10の商品と20の商品との間へ追加するなら、新しい商品の表示順を15にします。ここでは封筒、用紙、ラベルの3商品が登録済みで、その間へクリアファイルを追加する例で説明します。新規商品のIDが末尾の番号でも問題ありません。

新規レコードを追加する

テーブルのデータシートビューを開き、左端にアスタリスクが付いた新規行へ移動します。「商品名」にクリアファイル、「表示順」に15を入力してください。商品IDは自動採番に任せます。別の行へ移動して保存し、入力規則などのエラーが出ていないことを確認します。

選択クエリで並べ替える

1. [作成]→[クエリデザイン]で「T_商品」を追加します。

2. 商品ID、商品名、表示順をデザイングリッドへ配置します。

3. [表示順]列の[並べ替え]を[昇順]にします。

4. データシートビューに切り替え、10、15、20、30の順で表示されるか確認します。

5. 「Q_商品一覧」として保存し、閉じて開き直しても順序を再現できるか確認します。

表示順商品名商品IDの扱い
10封筒登録済みのIDを維持
15クリアファイル追加時の新しいIDを維持
20用紙登録済みのIDを維持
30ラベル登録済みのIDを維持

この状態は、テーブル内の物理的な保存位置を移したのではありません。保存された値を使って、クエリが目的の順番で表示しています。商品名順の一覧も必要なら、別のクエリで商品名を基準に並べ替えられます。

表示順15の新規レコードを10と20の間に表示する例

4  SQLとフォームに同じ並び順を設定する

SQLではORDER BYで表示順を指定します。同じ表示順が複数あるときにも順序を安定させたいなら、2番目の条件として一意の商品IDを付けます。クエリデザインでは並べ替え対象の列配置にも注意が必要なので、複数キーの優先順位をSQLビューで確認すると分かりやすくなります。

SELECT [商品ID], [商品名], [表示順]
FROM [T_商品]
ORDER BY [表示順] ASC, [商品ID] ASC;

INSERT INTOは追加する命令

追加処理は次のように記述できます。これは新しい商品を保存するSQLで、表示上の「上から2行目」を指定するものではありません。実行前に対象ファイルを確認し、1回実行した後に追加件数と商品名を調べます。同じSQLを繰り返すと同じ商品名の別レコードが増える可能性があります。

INSERT INTO [T_商品] ([商品名], [表示順])
VALUES (‘クリアファイル’, 15);

前のSELECT文を実行すると、表示順15のレコードが10と20の間に見えます。追加と表示を別々に確認すれば、「登録できなかった」のか「並べ方が違う」のかを切り分けられます。SQLに不慣れな場合は、まず画面での追加と選択クエリだけを試して構いません。

フォーム側の並べ替えも確認する

一覧フォームのレコードソースを「Q_商品一覧」にしても、フォーム独自の並べ替えが適用されていれば別の順序になる場合があります。プロパティの[並べ替え]や、起動時イベントで設定するOrderByを確認してください。VBAで指定するなら、条件と有効化をセットにします。

Private Sub Form_Load()
    Me.OrderBy = “[表示順] ASC, [商品ID] ASC”
    Me.OrderByOn = True
End Sub

この例は一覧フォームの[読み込み時]イベントに置きます。既存のForm_Loadがある場合は、同じ名前の処理をもう1つ作らず、必要な行を既存処理へ統合します。レコードソースに表示順と商品IDが含まれることも前提です。レポートでは[グループ化と並べ替え]の設定を別途確認します。

クエリ、フォーム、レポートで並び順を明示する必要性

テーブルへの行挿入の設定や運用で困っている場合は

まずはコピー環境で本記事の手順を確認してください。表示順の一括整理、グループ別並べ替え、複数人編集など、影響範囲の判断が難しい場合は、Accessの教科書のお問い合わせフォームから状況をご相談いただけます。使用中の版、対象の画面やテーブル、再現手順を整理すると、相談内容が伝わりやすくなります。


5  同順位や空欄や番号不足に対処する

表示順の値を持たせただけでは、業務上の並びを完全には決められません。同順位を許すか、空欄を認めるか、間の番号がなくなったら誰が整理するかを先に定めます。主キーとは異なり表示順は変更してよい項目ですが、変更作業の影響は複数の画面に及びます。

症状考えられる原因対応
10の次に100が来る表示順が短いテキスト型数値の大小で扱うなら数値型にする
同じ順位の前後が一定でない第2の並べ替え条件がない商品IDなど一意のキーを追加
未設定の商品が先頭に出る表示順がNull既存の空欄を確認し、入力ルールを決める
クエリとフォームで順番が違うフォームの独自ソートOrderByと適用状態を確認

空欄を残す設計もできますが、「空欄は最後にする」などの条件を明示する必要があります。初心者が管理する小さな一覧では、既存の空欄を埋めてから必須入力とする方が分かりやすい場合があります。0も通常の数値なので、未設定の代わりに入れるならその意味を統一します。

表示順の空欄、同じ表示順、フォームの別ソートを確認するポイント

使える整数がなくなったら再配置する

10と11の間へ追加したい場合、長整数では中間の整数を指定できません。小数を繰り返し使って細かくするより、管理対象の順序を確認し、10、20、30のように間隔を取り直す運用が扱いやすくなります。対象は表示順だけで、商品IDは変更しません。

作業は「編集を止める」「現在のIDと表示順を控える」「目的順を決める」「新しい表示順へ更新する」「全件を照合する」の順で行います。表示順に一意制約がある場合、途中の値が既存値と衝突することがあります。一括更新の方法や一時値の利用を検討し、単純な上書きを繰り返さないでください。

表示順の番号間隔を確保し直す際の安全な作業手順

6  グループ別表示と複数人編集に対応する

カテゴリごとに商品を並べたい場合は、どの範囲で表示順を管理するか決めます。「文具の10」と「消耗品の10」を許すなら、カテゴリの中で順序を指定していることになります。同じ数字が別カテゴリにあることは、必ずしも重複エラーではありません。

例えばT_商品にカテゴリIDがあるなら、ORDER BY [カテゴリID], [表示順], [商品ID]でカテゴリ内の順番を表現できます。ただしカテゴリID順が利用者の望むカテゴリ順とは限りません。カテゴリ自体にも順番が必要なら、カテゴリテーブルに表示順を持たせる方法を検討します。

複数人編集では同時に15を選ぶ可能性がある

2人が同じ一覧を見て10と20の間へ追加すると、どちらも15を付けることがあります。同順位を許すなら第2ソートで表示は安定しますが、業務上どちらを先にするかまでは決まりません。順序を厳密に管理するなら、並べ替えの編集者を限定する、更新時に競合を検知するなどの対策を設けます。

一覧を再取得すると並び替え結果を反映できますが、未保存の入力や選択行がある場合は注意が必要です。保存が完了したことを確認してから再表示し、必要なら商品IDを使って元の選択行へ戻す設計にします。「画面が動いた」ことと「入力が消えた」ことを混同しないよう、操作の順序を明確にします。


7  追加と並べ替えの確認とまとめ

途中に行を表示するには、新規レコードを追加し、表示順で並べ替えるという2段階で考えます。主キーは識別用として保持し、表示位置だけを表示順で変えます。クエリ、フォーム、レポートのどこで順番を指定しているかまで揃えると、開き直した際の違いも調査しやすくなります。

追加件数と主キー、表示順、再表示後の結果を確認する項目
確認項目期待する結果
登録前後の件数新規追加なら1件増える
既存の商品ID追加前と同じ値を維持する
10と20の間への追加表示順15が間に表示される
同順位がある場合商品IDなど第2条件で一定になる
フォームの開き直し指定した並び順を再現する
CSVやレポート用途ごとの順序を明示して再現する

よくある質問

A. Accessでは、Excelの行番号を押し下げるような考え方でテーブルを管理しません。新しいレコードを追加し、表示順などの値で並べ替えることで、目的の位置へ表示します。帳票の見た目を整えるための空行なら、データとして空レコードを登録せず、レポートの配置で余白を作ります。まず「新しいデータを登録したい」のか「表示位置を変えたい」のか「印刷に空白がほしい」のかを分けると、適切な設定箇所が分かります。

A. INSERT INTOは、テーブルへ新しいレコードを追加するためのSQLです。「上から3行目」などの表示位置は指定しません。途中に見せたい場合は、追加するレコードの表示順に値を入れ、その後のSELECT文でORDER BYを指定します。例えば10と20の間なら表示順15を付ける方法があります。追加処理を繰り返すと同じ内容のレコードが増える場合があるため、表示されないからと何度も実行せず、まず登録件数と抽出条件を確認します。

A. 並べ替えのために主キーのオートナンバーを変更する方法は避けます。商品IDは、受注明細や他のシステムからその商品を参照するための識別子だからです。見た目を整える目的で番号を振り直すと、関連付けや出力済みデータとの対応が崩れるおそれがあります。表示順という別の数値フィールドを作り、クエリやフォームでそれを並べ替えに使ってください。IDが大きい商品を先頭へ表示しても、データ設計上は問題ありません。

A. 数字の大小で順番を決めるなら、通常は数値型を使います。短いテキスト型では、1、10、2のように文字の並びとして扱われ、期待する数値順と違うことがあります。整数で運用するなら長整数型を選び、10、20、30のように間隔を空ける方法が分かりやすいでしょう。一方、A-01などの業務コードは別の目的なので短いテキストにします。コードの見た目と一覧の順序を1つの項目で兼用しない方が、変更しやすくなります。

A. 業務上、同じ順位を許してよいなら登録できる設計にできます。ただし、表示順だけでは同順位の前後が決まらないため、商品IDなど一意の値を第2の並べ替え条件に加えます。同順位を許さない場合は、テーブルの制約と入力処理で重複を防ぐ必要があります。カテゴリごとに順番を管理するなら、カテゴリと表示順の組み合わせで判断します。表示が安定することと、業務上の優先順位が正しいことは別なので、運用ルールも決めます。

A. フォーム独自の並べ替えや、起動時のVBAがクエリの順序とは別の条件を適用している可能性があります。まず元クエリだけで正しい順序になるか確認し、次にフォームの並べ替え条件とOrderByOnを調べます。レコードソースが想定したクエリであるか、別のコピーのフォームを開いていないかも確認してください。変更箇所を1つずつ分けると、データに入れた表示順が誤っているのか、表示側が上書きしているのかを判断できます。

A. 表示順を10、20、30のような間隔へ整理し直します。変更するのは表示順であり、商品IDなどの主キーはそのままにします。作業前にIDと現在の表示順を控え、他の利用者の並べ替えを止めてから更新し、全件の順序を照合してください。一意制約がある場合は更新途中の値が衝突する可能性もあります。頻繁な並べ替えが必要なら、利用者が数字を手入力する方式だけでなく、専用の並べ替え画面を検討する方法もあります。

A. 同時編集を想定した制御がある場合に限って運用します。単純に表示順を手入力するだけだと、2人が同じ中間値を選ぶ、後から保存した変更で前の意図が失われるなどの問題が起こり得ます。小さな運用なら順序を変える担当者や時間を限定する方法があります。厳密な運用では、更新前の値を照合して競合を検知し、複数行の変更をまとめて確定する設計が必要です。第2ソートだけでは編集競合そのものは解決できません。

テーブルへの行挿入の設定や運用で困っている場合は

まずはコピー環境で本記事の手順を確認してください。表示順の一括整理、グループ別並べ替え、複数人編集など、影響範囲の判断が難しい場合は、Accessの教科書のお問い合わせフォームから状況をご相談いただけます。使用中の版、対象の画面やテーブル、再現手順を整理すると、相談内容が伝わりやすくなります。

関連記事

Accessのテーブルとは

Accessのデザインビューの使い方

Accessのデータ入力用フォーム

更新できないレコードセットの対処


参考情報

1. ORDER BY
https://learn.microsoft.com/en-us/office/vba/access/concepts/structured-query-language/order-by-clause-microsoft-access-sql

2. INSERT INTO
https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/insert-into-statement-microsoft-access-sql

3. Form.OrderBy
https://learn.microsoft.com/en-us/office/vba/api/access.form.orderby

4. Form.OrderByOn
https://learn.microsoft.com/en-us/office/vba/api/access.form.orderbyon

5. 選択クエリの作成
https://support.microsoft.com/en-us/access/create-a-simple-select-query

TOP