Accessのクエリで連番を振る方法をお探しですね。
広告
Accessで行番号を表示する方法を分かりやすく解説!
Accessを使っていて、「Excelみたいに行番号が自動で出てくれたらいいのに…」と思ったことはありませんか?テーブルにオートナンバー型のフィールドを追加すれば連番は振れますが、クエリで抽出したり並べ替えたりした結果に対して「1, 2, 3…」と動的に番号を振りたいときには使えません。
この記事では、DCount関数を使ってクエリの結果に連番を振る便利な方法と、その仕組み、実際に使うときの注意点をわかりやすく説明していきます。
1. DCount関数を使った基本の書き方
Accessのクエリで抽出結果に連番を振る方法として、よく使われるのがDCount関数を活用したテクニックです。
DCount関数は本来、条件に合うレコードの数を数えるための関数なんですが、これをうまく使うと行番号として機能させることができます。
クエリのデザインビューで、空いているフィールドに次のような式を入力してみてください。
**数値型のキーの場合:**
“`
行番号: DCount("*", "テーブル名", "キーフィールド <= " & [キーフィールド])
“`
**文字列型のキーの場合:**
“`
行番号: DCount("*", "テーブル名", "キーフィールド <= '" & [キーフィールド] & "'")
“`
ここで大切なのが「一意のキーフィールド」です。
顧客IDや商品コードのように、絶対に重複しない主キーのフィールドを基準にする必要があります。
数値型か文字列型かで書き方が少し違うので、エラーが出たら確認してみてください。
この式を設定してクエリを実行すると、キーフィールドの昇順で「1, 2, 3…」という連番がきれいに表示されます。
2. なぜ連番になるの?仕組みを理解しよう
「式を入れたら連番が出た!でもなんで?」と思いますよね。
この仕組みを理解しておくと、エラーが出たときの対処や応用がしやすくなります。
DCount関数は「テーブルの中から、条件に合うデータの個数を数える」機能を持っています。
先ほどの式の「キーフィールド <= [キーフィールド]」という部分が、連番を作り出すポイントです。
例えば、キーフィールドに「101, 102, 103」という数値が入っているとします。
– **1行目(101)の処理:**「テーブルの中で101以下の値はいくつ?」→ 101だけなので「1」
– **2行目(102)の処理:**「テーブルの中で102以下の値はいくつ?」→ 101と102で「2」
– **3行目(103)の処理:**「テーブルの中で103以下の値はいくつ?」→ 101、102、103で「3」
このように、自分以下の値を持つレコードを数えることで、自然と1ずつ増える連番ができあがるんです。
ちょっとトリッキーですが、よく考えられた方法ですよね。
3. 抽出条件や並べ替えがあるときの対応方法
実際の仕事では、「特定の部署だけ表示したい」とか「並べ替え順を変えたい」といったケースがよくあります。
そんなときの対応方法を見ていきましょう。
クエリで条件を設定して一部のデータだけ抽出した場合、基本の式をそのまま使うと、テーブル全体の件数を数えてしまうため、連番が「1, 3, 5…」のように飛び飛びになってしまうことがあります。
これを防ぐには、DCount関数の条件部分に、クエリの抽出条件と同じものを追加します。
**条件を追加した例:**
“`
DCount("*", "テーブル名", "キー <= " & [キー] & " AND 部署名 = '営業部'")
“`
**降順に並べ替える場合:**
“`
DCount("*", "テーブル名", "キー >= " & [キー])
“`
AND演算子で条件を追加することで、抽出された結果の中だけで正確な連番が振られるようになります。
降順にしたいときは、不等号を逆にして「>=」にするだけでOKです。
また、キーフィールド以外(売上日や金額など)で並べ替えたい場合は、そのフィールドを基準に式を組み立て直す必要があります。
ただし、日付や金額には同じ値が複数あることが多いので、必ず重複のない主キーと組み合わせて使うようにしましょう。
4. 「処理が重い」問題と解決策
このDCount関数を使った方法はとても便利なんですが、実は大きな弱点があります。
それは「データが増えると、すごく遅くなる」ということです。
仕組みのところで説明したように、この方法では1行ごとにテーブル全体をスキャンして件数を数え直しています。
データが数百件くらいなら一瞬で終わりますが、数万件、数十万件になってくると、クエリを開くだけで画面が固まったようになり、数分待たされることも珍しくありません。
複数人で使っているデータベースだと、他の人の作業にも影響が出てしまいます。
そこで、実際の業務では状況に応じて次のような方法を検討するのがおすすめです。
**印刷やPDF出力が目的の場合:**
– レポートの「積算実行」機能を使う
**データ出力や別の処理に使う場合:**
– オートナンバー型を持つ「一時テーブル」を作って、そこにデータを流し込む
特に、最終的に印刷や帳票出力をしたいだけなら、レポート機能を使うのが断然おすすめです。
Accessのレポートには、テキストボックスのプロパティで「積算実行」を設定するだけで、軽くて簡単に連番を振れる標準機能があります。
DCount関数での連番付与は、データ量が少ないときや、ちょっとした確認作業にとどめておくのが賢い使い方です。
システム全体のパフォーマンスを意識した設計を心がけることが、Accessを上手に使いこなすコツですよ。
広告
