STARDUST can be found.

振り返らない。忘れるまでは。

Accessでオートナンバー型とDmax関数で連番を振る時のメモ

自身の仕事ではないのだけれど、Accessでレコードに連番を振る時のメモ。

基本的に私はVBなど高度な技は使えないので、クエリーと関数、そしてマクロだけで簡単にしたい。

    魔法少女まどか☆マギカ 5(完全生産限定版) [Blu-ray] 魔法少女まどか☆マギカ 2 【完全生産限定版】 [Blu-ray]   魔法少女まどか☆マギカ 1 【完全生産限定版】 [Blu-ray] 

この連番の振り方を使うにはいくつか前提条件がある

  • 連番(レコード)の並び順が厳格ではない
  • 仮に想定の逆順に連番が付いても問題は無い
  • 連番付与後はレコードの追加削除を行わない
    (つまり、連番付与後の変更は振り直しで対応)
  • その他、何かあるかも・・・

今回は作成したデータに連番を振りたい(その後テキスト出力)だけなので、上記の条件でも問題ないはず・・・たぶん。

手順

  1. 連番にオートナンバー型を使うため、連番付与したいテーブルを基にオートナンバー型フィールド[AUTONUM]を追加したテーブルを新規作成
  2. 新規テーブルのデータを一括削除するクエリーを作成
  3. 新規テーブルに元データを追加するクエリーを作成(データを逆順に追加するのを推奨)
  4. 新規テーブルに連番をつける(選択)クエリーを作成
    • 新規テーブルから必要なデータをぶち込む
    • 新フィールド
      [連番:=Dmax([AUTONUM])-[AUTONUM]+1]
      を追加(※Dmax式テキトーw)
    • [連番]を昇順に設定
  5. 2-3を実行して4をテキスト出力するマクロを作成

以上で完成。

テキトーな解説をするとDmaxでオートナンバーの最大数を拾って、そこからオートナンバーのデータをマイナス、そしてプラス1。
例えば、オートナンバーの最大が100だと、

100 - 100 + 1 = 1

で、オートナンバーが99 のレコードは、

100 - 99 + 1 = 2

となる。

なんとも手っ取り早い方法ではあるけれども、レコードの追加削除にはオートナンバーの振り直しからスタートしなければならないし、オートナンバーとは逆順で連番を振るので、元データに順番を示す数値フィールド等が無いと、まるまるデータは逆に並んでしまう。

もっとスマートな方法があるようにも思うし、それ以前にAccessに連番を振る関数があっても良いように思う。

桐にはあるらしい。

もしかして最新のAccessならあるんじゃないか?

 

 

管理工学研究所 桐10 通常版 +sp2

管理工学研究所 桐10 通常版 +sp2