こんにちは、Accessブロガーのなかぜんです。
業務で管理番号をつける場面、けっこう多いですよね。例えば「ABC-0001」「REQ-2025-001」など、決まったルールの番号で情報を管理したいとき。
でも、Accessでは「オートナンバー」だけじゃ、思った形にならない…。そんなお悩み、ありませんか?
今回は、接頭辞つきの管理番号をAccessで自動生成する方法を、フォーム+VBAでやさしく解説します!
やりたいこと:接頭辞+連番で番号を作る
たとえば、以下のような番号を自動で作成したいとします。
REQ-0001
REQ-0002
REQ-0003
この番号を、フォームで新規登録するときに自動で生成して、テーブルに保存する流れです。
必要なテーブル構成
まずは、テーブルに以下のようなフィールドを用意します。
- ID:主キー(オートナンバー)
- 管理番号:テキスト型(例:REQ-0001)
- その他:必要な項目(氏名や日付など)
※「ID」は内部管理用に残しておくと便利です。
フォーム+VBAで管理番号を自動生成
ここからが本題。フォームで新規レコードを追加したときに、VBAで管理番号を生成します。
① フォームの「BeforeInsert」イベントを使う
フォームのプロパティシートから、イベントタブ → BeforeInsert
を選び、VBAコードを以下のように記述します。
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim 接頭辞 As String
Dim 次番号 As Long
Dim 最大番号 As Variant
Dim 管理番号 As String
接頭辞 = "REQ-"
' 最大番号の取得(管理番号の後半だけを取り出す)
最大番号 = DMax("Val(Mid([管理番号],5))", "T_管理データ")
If IsNull(最大番号) Then
次番号 = 1
Else
次番号 = 最大番号 + 1
End If
管理番号 = 接頭辞 & Format(次番号, "0000")
Me!管理番号 = 管理番号
End Sub
② 解説
- DMax関数で、既存データの最大番号を取得します。
- Mid関数で「REQ-0001」→「0001」の部分を抜き出して数値化します。
- Format関数で、桁数をそろえて「0001」形式にします。
注意点・よくあるミス
- 管理番号フィールドはテキスト型にしておく
- 接頭辞の桁数に合わせて
Mid()
の位置を調整する(例:4文字接頭辞ならMid(...,5)
) - 既存データに不正な文字列(例:「REQ-abc」)があると
Val()
が正しく動作しない
→ 安定運用のためには、「管理番号」をユーザーに直接入力させないようにしましょう。
応用ポイント:年月付き番号や部門ごとの管理番号
中級者向けに、ちょっと発展的なアイデアもご紹介します。
① 年月付き番号にする
接頭辞 = "REQ-" & Format(Date, "yyyymm") & "-"
例:REQ-202505-0001
② 部門コードごとに分ける
たとえば「営業部=SLS」「開発部=DEV」など、フォームで部門コードを選び、それを接頭辞に含めます。
接頭辞 = Me!部門コード & "-"
まとめ:自動採番+接頭辞は業務に超便利!
今回は、Accessで接頭辞付きの管理番号を自動生成する方法をご紹介しました。
- フォームの
BeforeInsert
イベントで自動採番! - 文字列操作(
Mid
、Format
)を使いこなそう - 安定運用には入力制御も大事!
このテクニックは、請求書番号、申請番号、製造指示番号など、さまざまな業務で活用できます。
「自分でもできそう!」と思ってもらえたらうれしいです😊
それでは、またお会いしましょう〜!
bookfan 1号店 楽天市場店
¥2,992 (2025/05/04 17:53時点 | 楽天市場調べ)
