Accessは全くの初心者です。
プログラマーさんのサイトや質問サイトを参考に、初めてデータベースを作っているのですが、
どうしても文字+年ごとの自動採番がうまくいきません。
挿入前処理で「営250001」のように漢字1文字+和暦2桁+4桁連番にして、
年が変わるごとに4桁連番を0001に戻したいのです。
今入力してあるコードは以下の通りです。
-----------------------------------------------------------------------------
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim vDt As Variant
vDt = DMax("番号", "営テーブル", "番号 Like '" & Format(Date, "ee") & "*'")
If (IsNull(vDt)) Then
番号 = "営" & Format(Date, "ee") & "0001"
Else
番号 = "営" & Left(vDt, 2) & Format(Val(Right(vDt, 4)) + 1, "0000")
End If
End Sub
-----------------------------------------------------------------------------
この状態では、0001のまま採番が進まず、行き詰ってしまいました。
他の質問者さんが(Date,"ee")を(Now,"nn")に置き換えて、分ごとの採番を試していたのを参考に、
「"営"&」を取って、採番が進むところまでは確認できました。
使っているのはAccess2003です。
どうか、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
> vDt = DMax("番号", "営テーブル", "番号 Like '" & Format(Date, "ee") & "*'")
これでは、先頭の 「漢字1文字」 が無視されていますね。
vDt = DMax("番号", "営テーブル", "番号 Like '営" & Format(Date, "ee") & "*'")
とか、
vDt = DMax("番号", "営テーブル", "番号 Like '?" & Format(Date, "ee") & "*'")
さらに
> 番号 = "営" & Left(vDt, 2) & Format(Val(Right(vDt, 4)) + 1, "0000")
を
番号 = Left(vDt, 3) & Format(Val(Right(vDt, 4)) + 1, "0000")
上記は
"営テーブル"の "番号"フィールドには , 「営250001」 のように保存されているものとします。
1桁目は"営"固定の場合です。
そうでない場合は、また変わってきます。
できました!
vDtで定義した中にも1桁目の漢字が入らなければいけなかったんですね…
「"番号 Like '"」の部分が理解できていなかったので、
どこに1桁目の漢字を定義していいのかがわかっていませんでした。
教えていただいたとおりに直し、あらためてヘルプ等でLike演算子を調べ、
なんとなくですが、理解できた気がします。
テーブルごとに1桁目の漢字決め、固定して使うので教えていただいたコードで
進めたいと思います。
ありがとうございました。
No.3
- 回答日時:
主キーに複数の意味を持たせるな
http://hatenachips.blog34.fc2.com/blog-entry-201 …
絶対に・・・というわけではないと考えますが
人間にとって分かりやすい ≒ データベースの処理に適切
だと思います。
作成中、いろいろ検索した中で、リンクしていただいたページも見てました。
たしかに、このままでは主キーとしては不安定ですよね。
この自動採番は、以前から使用していた番号の形式を使い、
何かの時にはこの番号で検索もしたいとのことだったので、
この番号以外に、オートナンバーの主キーを設定しています。
教えていただき、ありがとうございました。
No.2
- 回答日時:
以下でどうなりますか
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim vDt As Variant
Dim sS As String
sS = "営" & Format(Date, "ee")
vDt = DMax("番号", "営テーブル", "番号 Like '" & sS & "*'")
If (IsNull(vDt)) Then
番号 = sS & "0001"
Else
番号 = sS & Format(Val(Right(vDt, 4)) + 1, "0000")
End If
End Sub
※ "営25*" で探すので、"事250123" とかあったら、
"営" / "事" それぞれでの採番になると思います。
※ "営25" を作るところは1箇所にします。
ほぼないと思いますが、前後で年を越したら・・・・
もしかして http://oshiete.goo.ne.jp/qa/5749336.html とかを見られました?
そこでは2箇所に記述していましたが・・・
なお、以下のような書き方もあるかも(未検証)
(DMax の戻り値の時に数値にしておく)
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim sS As String
sS = "営" & Format(Date, "ee")
番号 = sS & Format( _
Nz( _
DMax("Val(Right(番号, 4))" _
, "営テーブル" _
, "番号 Like '" & sS & "*'") _
) + 1 _
, "0000")
End Sub
余談)
挿入前処理での採番ですが、更新前処理で採番する事もあると思います。
タイミング的にどちらが良いのか、それは判断してください。
その時には、新規レコードか判別して・・・・以下雰囲気で
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim vDt As Variant
Dim sS As String
If (Me.NewRecord) Then
sS = "営" & Format(Date, "ee")
vDt = DMax("番号", "営テーブル", "番号 Like '" & sS & "*'")
If (IsNull(vDt)) Then
番号 = sS & "0001"
Else
番号 = sS & Format(Val(Right(vDt, 4)) + 1, "0000")
End If
End If
End Sub
不都合あれば修正してください。
そうです!
その質問ページを参考に、今の自動採番を作っていました。
30246kiku様が丁寧に回答されていたので、全くの初心者の私にも
だいぶ理解できるものでした。
私の質問にも回答いただけて、なんかちょっと嬉しい気が…(^^)
本題ですが、
「漢字+年」と「連番」で分けるという方法もあるんですね。
見た目がシンプルで、わかりやすいかも…
肝心の動作確認ですが、実はまだできてません^^;
職場へのデータの持込・持出厳禁なのと、自宅PCにAccessが入っていないのとで、
仕事の合間に作っている現状なのです。
とりあえずなお礼で申し訳ありませんが、この方法の動作確認ができたら、
最初の方法とどちらがいいか、検討したいと思います。
ちなみに、未検証で書いていただいたコードは、
すいません!Nz関数を調べてみても、初心者すぎる私には理解が難しく。。。
処理のタイミングも、どこか入力し始めたら番号が出るようにしたいので、
挿入前処理で進めたいと思います。
たくさんの回答例をいただき、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
準・究極の選択
「年収1000万円で一生カレーライス」か 「年収180万円で毎日何でも食べ放題」 あなたはどちらを選びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
access 自動採番 年が変わるごとに0001に戻る仕組み。
その他(データベース)
-
accessでオートナンバーを使わずに「文字+数字」の自動採番する方法
Access(アクセス)
-
Accessで日付が変わると番号がリセットされる自動採番がしたい
Access(アクセス)
-
-
4
ACCESSで日付ごとに自動連番(日付+連番)する方法
Access(アクセス)
-
5
accessでの文字列の混ざった連番処理について
Access(アクセス)
-
6
Accessで、固定アルファベット+オートナンバーを表示する
Excel(エクセル)
-
7
access 自動採番 「10-AA-0001」にするには。
その他(データベース)
-
8
ACCESSの自動連番について
Access(アクセス)
-
9
access 請求番号の自動採番
その他(データベース)
-
10
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
11
ACCESSでオートナンバーを任意の書式で付けたい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
アクセスで「空き番」の確認
-
Access:抽出して、色をつけたい。
-
最新の日付とその金額をクエリ...
-
Accessで日付が変わると番号が...
-
【アクセスVBA】テーブルにフィ...
-
vba 直前の操作はキャンセルさ...
-
[Access]異なるレコード間の文...
-
最大レコード数について
-
アクセス 項目ごとに自動採番
-
Access 文字+年ごとの自動採番
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
Access終了時の最適化が失敗?
-
SELECTで1件のみ取得するには?
-
OracleのSQL*PLUSで、デー...
-
DataGridViewにてセル以外をク...
-
DataGridViewの内容をDBに反映...
-
select insertで複数テーブルか...
-
差し込み印刷のレコード数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
最新の日付とその金額をクエリ...
-
Accessでのレコード存在チェック
-
[Access]異なるレコード間の文...
-
【SQL】existsでの商演算
-
access 自動採番 「10-AA-000...
-
Recordset.FindFirstについて
-
access 自動採番 年が変わる...
-
【アクセスVBA】テーブルにフィ...
-
質問です。 下記のテーブルとデ...
-
access 請求番号の自動採番
-
Accessで日付が変わると番号が...
-
アクセスで「空き番」の確認
-
【Access】選択クエリのグルー...
-
Access 文字+年ごとの自動採番
-
Access:抽出して、色をつけたい。
-
vba 直前の操作はキャンセルさ...
-
SELECT * FROM `生徒名簿` INNE...
-
サイベースには、オラクルのROW...
-
条件をつけて日付の古い行を抜...
おすすめ情報