アクセスVBAで伝票番号を自動連番にする方法

アクセス担当のまみです。

 

フォームを作成していて、伝票番号ってどうやって表示させるのかな、自動で連番振れるようにできないのかなって思いませんか?

レコードが1つだとオートナンバーが使えるけど、複数レコードある場合の伝票番号って自動で振れないのかな?何か方法ないのかなって・・・

 

実はVBAのコードを使って、複数レコードに同じ番号を持たせて連番を振ることができるんです。

今回はその方法をお伝えしますね。

Contents

テーブルとフォームを準備する

 

説明のために「営業日報」ファイルを使用します。同じファイルの方が理解しやすいのでお時間があれば下記の記事から作成してみてくださいね!

【アクセス】コンボボックスにテーブルの値を表示させよう

2018年10月24日

 

では「営業日報」ファイルを開き、「T_営業日報」テーブルをデザインビューで開きましょう。

登録NOの下に行を挿入して、下記の3つを追加します。

フィールド名 データ型
伝票番号 数値型
伝票頭に0 短いテキスト
伝票頭に文字 短いテキスト

 

 

(はてな君)
わかったぁ!伝票番号の振り方3種類を教えてくれるんだ!

テーブルは保存して閉じておきましょう。

次は「F_営業日報」をデザインビューで開き、テキストボックスを3つ配置します。

 

位置はお任せしますので、名前を下記のとおりそろえておきましょう。

 

ラベルの名前 テキストボックスの名前
伝票番号 tx伝票
伝票0 tx伝票0
伝票文字 tx伝票文字

 

私は右上に3つ並べてみました。それから、3つのテキストボックスはデータ入力用ではないので、さわれないようにしておきましょう。

 

 

これでテーブルとフォームの準備ができました。

 

連番を振る方法

 

それでは3種類の伝票番号の振り方をご紹介しますね。

 

1から連番を振る

 

では、Visual Basicの画面を開いてコードを追加しましょう。

①「作成」タブから②Visual Basicを左クリックします。

コードを開いたときに伝票番号が表示されるようにしたいので、追加するのは「Form_Load」です。

 

(はてな君)
フォームを開いたときの処理にクリア処理があるけど表示されるようにできるの?

 

(あいちゃん)
テキストボックスとコンボボックスが空欄になるようにって処理が入っているからできるのかなって思ったんだね。

 

プログラムって上から順番に実行されていくので、クリア処理の後にコードを追加すれば表示されるようになるんです。

クリア処理後に下記のコードを追加しましょう。

 

    If DCount("伝票番号", "T_営業日報") = 0 Then
        Me.tx伝票.Value = "1"
    Else
        Me.tx伝票.Value = Format(DMax("伝票番号", "T_営業日報") + 1)
    End If

 

 

それからデータ登録に下記のコードを追加しましょう。

            .Fields("伝票番号") = Me!tx伝票.Value
            .Fields("伝票頭に0") = Me!tx伝票0.Value
            .Fields("伝票頭に文字") = Me!tx伝票文字.Value

 

データ登録後のクリア処理の後に Me.tx伝票.Value = Format(DMax(“伝票番号”, “T_営業日報”) + 1) の追加も忘れずに!

この処理を追加することで、データ登録後に伝票のカウントが1つ進みます。

 

 

コードをコピーされたい場合は下記の記事を参考にしてください。

 

関連記事
 
 
それではフォームビューで確認してみましょう。
 
 
 
 
伝票番号に1が表示されました!
 
いくつかデータを登録して確認してみてくださいね!
 
 
 
 
 
(はてな君)
前の記事と考え方は同じで、データが複数になったってことなんだ。
 
 
(あいちゃん)
そういうことです!
 
 

頭に0をつける

 

(はてな君)
前の記事見たからコードわかるよ!

 

では、「Form_Load」のクリア処理の後に下記のコードを追加しましょう。

 

    If DCount("伝票頭に0", "T_営業日報") = 0 Then
        Me.tx伝票0.Value = "0001"
    Else
        Me.tx伝票0.Value = Format(DMax("伝票頭に0", "T_営業日報") + 1, "0000")
    End If

 

データ登録後のクリア処理の後に Me.tx伝票0.Value = Format(DMax(“伝票頭に0”, “T_営業日報”) + 1, “0000”) の追加も忘れずに!

 

 

(はてな君)
動作確認してみたよ!ちゃんと思ってる通りに動いてくれた~。

 

頭に文字をつける

 

(はてな君)
頭に文字をつけるってB1とかってこと?

 

(あいちゃん)
そうそうそんな感じ。せっかくだからもう少し難しくしてB0001にしようかな。

 

この処理は「tx伝票番号」を利用します。

 

伝票番号のデータが0の時の処理に下記のコードを追加します。

        Me.tx伝票文字.Value = "B" & "0001"

 

伝票番号の登録が既にあった場合の処理と、データ登録後のクリア処理の後に下記のコードを追加します。

        Me.tx伝票文字.Value = "B" & Format(DMax("伝票番号", "T_営業日報") + 1, "0000")

 

 
 
 
(はてな君)
ちょっと難しい。応用編になるんだね。
 
 
(あいちゃん)
B0001は文字として扱われるので1を足すことはできないんです。だから、伝票番号を利用して、Bとあわせるんです。
 
 
(はてな君)
なるほど~。じゃぁ実際に使うときは伝票番号は見えないようにしておくんだ。
 
(あいちゃん)
はてな君よく気が付きましたね。コードを書いて動作確認している時は必要なんだけど、実際に使うときは必要ないですからね!
 
 
 

まとめ

 

複数のレコードに対して同じ番号を振る方法をお伝えしました。

 

色々な場面で使えるので、ぜひ使ってみてくださいね!

 

 

 

スポンサーリンク