目次
自動採番
こんにちは。伊川(@naonaoke)です。
ACCESSには、規定の機能で、IDが主キーとなり、オートナンバーで採番されます。
しかし、オートナンバー以外でも、自動採番をする方法があります。
とても簡単ですので、ぜひ、この機会に覚えてください。
問題提起
(株)IKAWAの阿久 世子男(アク セスオ)は、
上司から下記の依頼を受けました。
ACCESSで、連番を自動できないか?
どのような方法があるだろうか?
解決策
回答
・Dmax関数と、NZ関数を利用して、連番を自動発行する。
NZ関数と、Dmax関数
NZ関数
フィールドが空白のときに、一般的には、0を返す設定をします。
Dmax関数
特定のフィールドで、一番大きな数字を返します。
NZ関数と、Dmax関数で自動採番 作成手順その1 データベース確認
今回は、年月日に自動採番された番号を合体させます。
契約番号1と、契約番号2は同じものになります。
また、年月日は、そのままでは、自動採番の番号を合体させることができないので、Format関数を使います。
Format関数については、上の記事を確認してください。
NZ関数と、Dmax関数で自動採番 作成手順その2 コードを仕込む
面倒なので、名前が更新されたら、すべての処理が完了するようにしました。
NZ関数と、Dmax関数で自動採番 作成手順その3 コードを解説
Private Sub コマンド53_Click() DoCmd.RunCommand acCmdSaveRecord DoCmd.GoToRecord , , acNewRec End Sub Private Sub 名前_AfterUpdate() Me.[日時] = Date '--------------契約番号_1の採番------------------ Dim a As String '文字を扱う変数を宣言する a = Format(Me.[日時], "yyyymmdd") '日時に入力されたyyyy/mm/dd を yyyymmddへ変換する Me.[契約番号_1] = a & Me.[ID] '変数a(yyyymmdd)にオートナンバーのIDを &でつなげる '--------------------契約番号_2------------------ Me.会員番号 = Nz(DMax("[会員番号]", "MT_自動採番") + 1, 1) '会員番号に連番をふる Dim aa As String '文字を扱う変数を宣言する aa = Format(Me.[日時], "yyyymmdd") '日時に入力されたyyyy/mm/dd を yyyymmddへ変換する Me.[契約番号_2] = aa & Me.[会員番号] '変数aa(yyyymmdd)に会員番号を &でつなげる End Sub
ここがポイント
ここがポイント
ACCESSでは、Dmax関数、Dsum関数を
今回のような方法でよく使います。ただし、Excelと違って使いすぎると、
ACCESSの作動が重くなりますので、注意しましょう。
まとめ
今回のまとめ
今回は、契約番号1と契約番号2が、たまたま同じになりました。しかし、自動採番は、商品番号に枝番をつけるなど、色々用途があります。
今回のサンプルファイルは、No97です。
毎日の業務が、3時間短縮できます
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。