- ベストアンサー
ACCESSでの複雑な自動採番方法とハッシュタグの作成
- ACCESSでの工事台帳作成において、得意先CDごとに401〜499の工事CDを作成する方法についてご相談です。
- 現在の方法では番号のみが+1されるため、望む形になりません。改善策について教えてください。
- また、3つの事業部がある場合、同一の現場でも事業部によって工事CDが異なることがあります。どのように採番するのが良いでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
得意先CD は、2文字と仮定します。 以下でどうなりますか。(見難かったらすみません) Me![工事CD] = Me![得意先CD] _ & Format( _ Nz( _ DMax("Val(Right(工事CD,3))" _ , "T工事台帳" _ , "工事CD Like '*" & Right(Me![得意先CD], 2) & "*'") _ , 400) + 1 _ , "000") やっている事は、 DMax で、Me![得意先CD] の右側2文字の 工事CD を「T工事台帳」で探して・・・ あったら 工事CD の右側3文字を数値にした最大を求めておきます。 対象のものが無かったら初期値の 400 にするように Nz を使っておきます。 その値を +1 して、3桁表示に Format を使い、元々の Me![得意先CD] に付ける。 Me![得意先CD] が、AX、DAX、SAX なら、 '*AX*' で探します。 右側3文字を数値にした最大を求めるので、AX、DAX、SAX の区別はありません。 Me![得意先CD] は2文字以上等、チェックが必要になると思います。 また、上記では 499 を超える判別はしていないので・・・ 以下は雰囲気で 事業部の「D」「S」を、別途「txt事業部」に設けたとすると Me![工事CD] = Me![txt事業部] & Me![得意先CD] _ & Format( _ Nz( _ DMax("Val(Right(工事CD,3))" _ , "T工事台帳" _ , "工事CD Like '*" & Me![得意先CD] & "*'") _ , 400) + 1 _ , "000") これであれば、得意先CD は2文字・・・という制限はなくなるかと
その他の回答 (2)
- chayamati
- ベストアンサー率41% (260/624)
原始的ですが 得意先テーブルに最終工事No.(規定値=400)のフィールドを 定義してこれを管理するのはどうでしょう Private Sub 得意先ID_Exit(Cancel As Integer) If 工事No. = 0 Then 工事No. = 最終工事No. + 1 最終工事No. = 工事No. End If End Sub 工事テーブルの工事No.の規定値は0にしています ※ DCount だとレコードを削除された場合重複の工事No.が設定されます。
お礼
お礼が大変遅くなってしまい申し訳ございませんでした。 このような考え方もあったんですね。 参考になりました。 ありがとうございました。
- nag0720
- ベストアンサー率58% (1093/1860)
DCountの使い方が間違っています。 DCount("工事CD", "T工事台帳") これだと、工事CDが入っているレコードの件数を返すだけです。 特定の得意先のレコードの件数を返したいなら、3番目の引数(条件式)を指定います。 例えば、得意先CDがAXの件数なら、 DCount("工事CD", "T工事台帳", "得意先CD = ""AX""") 入力フォームの[得意先CD]を使う場合は、 DCount("工事CD", "T工事台帳", "得意先CD = """ & Me![得意先CD] + """") とします。 >また、現在3つの事業部があり一つの現場に最大3つの工事CDができることもあります。 >その場合、"D"または"S"をつけます(事業部の頭文字です) >AX401、DAX402、SAX403など、同一の現場であっても数字部分は重複させません。 3つの事業部はどのようなテーブル構成になっているのでしょうか? もし、1つのテーブルに全部登録されていて、同じ得意先CDを使っているのなら、上記の方法で問題なさそうですが。
お礼
お礼が大変遅くなりまして申し訳ございませんでした。 ご指摘・ご解説大変参考になりました。 ありがとうございました。
お礼
お礼が大変遅くなってしまい申し訳ございませんでした。 数週間の悪戦苦闘から、解放されました。 ご丁寧な解説も非常にわかりやすかったです。 本当にありがとうございました。