ACCESS クエリで連番を作成する方法

クエリで連番を作成する方法

ACCESSではレコードに番号を付与するシーンが良くあります。

連番で番号を付与するなら、一般的にはテーブルでオートナンバー型のフィールドを作成するのが最も簡単です。
しかし、何らかの理由でオートナンバーを利用できないこともあるでしょう。

今回は、そんなときのためにクエリで連番を作成する方法をご紹介します。


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

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSの基本的な使い方をご紹介していきます。

クエリで連番を作成する方法

クエリで連番を作成するためには、DCount関数を使用します。
DCount関数を使って対象のテーブルに対し、各レコードの主キーの値以下のレコード数を調べる、という方法です。

クエリの計算式は以下の形になります。

DCount ( “*” , “テーブル名” , ” 主キーのフィールド名 <= ” & [主キーのフィールド名] )

以下、例を挙げて具体的にご紹介します。

クエリで連番を付与するシーン

まず、どんな時にクエリで連番を作るでしょうか。
今回はサンプルとして以下のTRN_売上サンプルテーブルを準備しました。

TRN_売上サンプル

売上IDはオートナンバー型のフィールドで主キーにしていますが、途中でIDの数値が飛んでいますね。
データを入力後にレコードを削除すると、オートナンバー型のフィールドではこういう状態になります。

ACCESSのシステム内で利用する主キーとしては、各テーブルとのリレーションさえ保てていれば番号が飛んでいても全く問題ないのですが、表示するためには連番の数値が欲しい時があります。

そんな時にクエリでDCount関数を使って連番を付与しましょう。

DCount関数で連番を付与する

では、早速クエリを作りましょう。
クエリデザインから作成します。

クエリデザイン

フィールドリストにTRN_売上サンプルを配置し、テーブルの各フィールドを下段のデザイングリッドにドラッグアンドドロップします。

ここで、売上IDの右に1列追加して、以下の式を記述します。


 連番: DCount("*","TRN_売上サンプル","売上ID <= " & [売上ID])
 

各レコードに対して、自身の売上ID以下のレコード数を数える、という式です。
<=で自身のID以下としておりますので、例えば1レコード目は1が返ってくることになります。

ではデータシートビューで結果を見てみましょう。

このように、連番フィールドが追加されました。
連番の値は主キーである売上IDの数値が飛んでいても連番になっていることが分かると思います。

連番を数値型へ変換

しかし、上記をよく見ると連番の数値が左寄せになっていますね。
数値なら通常は右寄せのはずなので気持ち悪いと感じる方もいるかもしれません。

これは、DCount関数の戻り値がテキストで返ってきてしまっているためです。

そこで、Val関数を使って数値に変換しましょう。
先ほどのクエリの指揮を少し変更して以下にしました。


 連番: Val(DCount("*","TRN_売上サンプル","売上ID <= " & [売上ID]))
 

Val関数での数値変換を加えています。
結果をデータシートビューで見てみましょう。

このように、数値として右寄せで表示されるようになりました。

上記の方法でクエリで連番を付与することができますが、あくまでテーブル側で一意の主キーがあることが前提です。
ACCESSでは主キーは非常に重要な値ですので、テーブルの主キーはオートナンバーで自動的に付与することをお勧めします。

その上で、連番のフィールドが必要であれば今回のような方法で追加のフィールドを作るようにしましょう。

以上、クエリで連番を作成する方法をご紹介しました。


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

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

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

サービス一覧

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