アクセス担当のまみです。
フォームを作成していて、伝票番号ってどうやって表示させるのかな、自動で連番振れるようにできないのかなって思いませんか?
レコードが1つだとオートナンバーが使えるけど、複数レコードある場合の伝票番号って自動で振れないのかな?何か方法ないのかなって・・・
実はVBAのコードを使って、複数レコードに同じ番号を持たせて連番を振ることができるんです。
今回はその方法をお伝えしますね。
Contents
テーブルとフォームを準備する
説明のために「営業日報」ファイルを使用します。同じファイルの方が理解しやすいのでお時間があれば下記の記事から作成してみてくださいね!
では「営業日報」ファイルを開き、「T_営業日報」テーブルをデザインビューで開きましょう。
登録NOの下に行を挿入して、下記の3つを追加します。
フィールド名 | データ型 |
伝票番号 | 数値型 |
伝票頭に0 | 短いテキスト |
伝票頭に文字 | 短いテキスト |
テーブルは保存して閉じておきましょう。
次は「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つ進みます。
コードをコピーされたい場合は下記の記事を参考にしてください。
頭に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”) の追加も忘れずに!
頭に文字をつける
この処理は「tx伝票番号」を利用します。
伝票番号のデータが0の時の処理に下記のコードを追加します。
Me.tx伝票文字.Value = "B" & "0001"
伝票番号の登録が既にあった場合の処理と、データ登録後のクリア処理の後に下記のコードを追加します。
Me.tx伝票文字.Value = "B" & Format(DMax("伝票番号", "T_営業日報") + 1, "0000")
まとめ
複数のレコードに対して同じ番号を振る方法をお伝えしました。
色々な場面で使えるので、ぜひ使ってみてくださいね!