目次
任意のオートナンバーを振るにはどうする?
こんにちは。伊川(@naonaoke)です。
今回は、ACCESSについて説明をします。
すでに、何度か動画でも、ブログでも記載していますが、自動でナンバーを振る方法です。
オートナンバー型のIDは、自動で振られて、便利なのですが、レコードを削除すると、欠番になります。
VBAでオートナンバーを振る方法を紹介します。
1つ質問があります。
入力フォームから、入力した項目がテーブルに表示される際、IDを任意の数字から開始したいのですが、それは可能でしょうか?
このブログはこんな人にお勧め
- ACCESSのVBAの勉強をしている人
- オートナンバーに不便を感じている人
- 任意の番号から、オートナンバー振りたい人
このブログを、読み終わるころには・・・・
任意のオートナンバーを振ることができるようになります。
あわせて、最終レコードを取得することができます。
最終レコードを取得する
前回は、下記の記事で、レコードを入力した最終日を取得するという記事で紹介をしました。
今回は、連番を振るという事は、最終レコードを取得して、その取得したレコードに1を加えるというロジックになります。
思ったよりカンタンなので、スキルにしてください。
任意の連番を振る 作業手順 その1 入力フォーム確認
サンプルで下記のような入力フォームを作成しました。
レコードの保存と同時に、連番を振るVBAです。
任意の連番を振る 作業手順2 コードを解説
コード自体は、それほど難しいとは思いません。
しかし、このコードの処理のポイントは、Nullの処理なのです。
最初にレコードの入力するときは、最終レコードは、まだ入力されていません。
この処理をする場合は、IF構文で条件判定をしなければなりません。
ご質問者様は、1000からの連番を振りたいということなので、
最終レコードが無ければ、つまり、最初に入力するレコードの時は、1000を入力する。
そうじゃなければ、myLastに最終レコードの値を格納後、その最終値に、1を足すという事になります。
これで完了です。
変数をなぜ、Variant型にするのか?
Nullの使い方が不正です。
このようなエラーが出ることがあります。
このエラーは、結構しらないと、ハマります。
私も、2日くらいハマった記憶があります。
解決方法としては、変数の型をVariant型に変更すると、回避できます。
String型の変数は、Nullを格納でいないので、上記のようなエラーが出ます。
今回は、数値型なのですが、上記のエラーを回避するために、Variant型にしています。
また、巷では、Variant型にすると、処理速度が遅くなると言いますが、気にすることはないと思います。
見当違いの回答だったみたいです
ご視聴者様から、再度の質問がきました。
すみません。私の説明不足でした。
ldを、西暦を頭にして、下4桁を連番にしたいです。
西暦が変われば自動で西暦頭の0001からスタート
(例:200001スタートして、200002.3.4.5となる。西暦が変われば210001からみたいな感じ)にしたいのですが、可能でしょうか⁈
説明が悪く申し訳ありません…
私の再度の質問
2000年1月という意味ですか?
トンチンカンな回答をしました。
申し訳ありません。
質問者様の希望を実現させる 作業手順 その1 おそらく下図のこと?
入力フォームのVBAを利用してなら、すぐには思い浮かびません。
スキルが無くて申し訳ないです。
でも、クエリなら、カンタンに作成できます。
これも、すでに、ブログでアップしていますが、再度解説します。
質問者様の希望を実現させる 作業手順 その2 入力フォームを変更する
日時がないと、実現ができないので、入力項目を足します。
考え方ですが、入力フォームは最低限の項目を設置することが、最善だからです。
質問者様の希望を実現させる 作業手順 その3 クエリ作成する
日時から、西暦だけを取り出す
年に関しては、Year関数を使えば、カンタンに西暦を抽出できますので、割愛します。
グループ毎に連番を振る
このようなクエリを作成しました。
最低限の情報から、値を変幻自在に操作して、実現するというものです。
200001は、クエリで実現させるのか、入力フォームで実現させるのかという問題になります。
必ずしもフォーム上での実現でなくても、良いのかなと思いました。
もちろん、上記のコードを変形させて、入力フォーム上での実現も可能です。
さらに発展させる
このようなクエリに関しては、作成のままの放置は行けません。
私なら、せっかく、クエリ1の中に連番という一意のキーが作成されたのだから、連番を元に新しいテーブルを作成します。
ここがポイント
入力フォームと、クエリの役割分担を改めて知ったご質問でした。ACCESSは、大技を知らなくても、小技を利用することで、結構、すごいシステムが作成できます。
まとめ
今回は、質問の回答でした。
何かあれば、回答するので、遠慮なく質問をしてください。
最後まで、読んでいただき、ありがとうございました。
今回のサンプルファイルは、No180です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。