Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


187 / 2272 ツリー ←次へ | 前へ→

【12632】管理番号を自動生成したい 工場長 14/10/29(水) 21:24 質問[未読]
【12636】Re:管理番号を自動生成したい かるびの 14/11/5(水) 0:34 回答[未読]

【12632】管理番号を自動生成したい
質問  工場長  - 14/10/29(水) 21:24 -

引用なし
パスワード
   こんばんは

難しい難題に遭遇しまして、解決方法は全くわからなくて、

いま困っています。ご指導をよろしくお願いします。

《難題》

以下のような規則で管理番号を生成するにはどうすればいいでしょうか?


Aフォーム
工程識別区分   部品項目
あ        00
あ        01
あ        02 ←新規で「あ」を入力すると、
            既存のあの部品項目は01のため、
            自動でその次の「02」を生成できるようにしたい。。。

//////////////////////////////////////////////////////////
部品項目の要素と配列順番は以下の通り、
00,01,.....99                →100個
A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA.AB....AZ  →36個
B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,BA.BB....AZ  →36個
.
.
.

Z0,Z1,Z2,Z3,Z4,Z5,Z6,Z7,Z8,Z9,ZA.ZB....ZZ  →36個
の順で並べられる要素は1036個
※合計=100+26×36=1036個
//////////////////////////////////////////////////////////

【12636】Re:管理番号を自動生成したい
回答  かるびの  - 14/11/5(水) 0:34 -

引用なし
パスワード
   >管理番号を生成するにはどうすればいいでしょうか?
 まず、第一の方法です。
アクセスでは、00からZZまでの値を格納するテーブルを作るのが
一般的だと思います(工程1−1)。

テーブル名:T部品項目
フィールド:部品項目ID 整数型 主キー
      部品項目  テキスト型

部品項目ID 部品項目
  1     00
  2     01 
  3     02

 100     99
 101     A0

 他方、Aフォームのレコードソースがテーブル「A」だとすると、
「A」テーブルに「部品項目ID」という整数型のフィールドを設けます。
 そして、Aフォームの「工程識別区分」コントロールに「あ」と入力されたら、
「A」テーブルの「部品項目ID」フィールドの最大値を取得し(DMax関数)、
これに1を加えたものを当該レコードの「部品項目ID」フィールドの値とします。
この処理はVBAを使う必要があります(工程1−2)。

 そして、Aフォームのレコードソースは、
「A」テーブルと「T部品項目」とを、「部品項目ID」フィールドで結合させた
クエリとします(工程1−3)。

 
 第二の方法ですが、
 まず、T部品項目を作ります(工程2−1)。
 そして、Aフォームの「工程識別区分」コントロールに「あ」と入力されたら、
Aフォームのレコードソースにおいて
「工程識別区分」フィールドが「あ」であるレコード数を
取得します(DCount関数)。
このレコード数に1加えたものがT部品項目の「部品項目ID」フィールドの値となる、
そういうレコードの「部品項目」フィールドの値を得ます(DLookup関数)。
この「部品項目」フィールドの値をAフォームの「部品項目」テキストボックスに代入します。
この処理もVBA必須です(工程2−2)。


 第三の方法ですが、
Aフォームにおいて前レコードの「部品項目」テキストボックスの値を取得し、
計算により次の部品項目を取得するという方法も考えられます。
 でも、この計算はやっかいです。
 部品項目の一桁目と二桁目を別々に取得したり、
9の次がAになるようにしたり、
Aの次がBになるようにしたり、
Zの次が0になるようにしつつ、下から2桁目を一つ繰り上げたり
する処理を、If文を駆使して考える必要があります。
 なお、Aの次がBになるようにするためには、文字コードを使うことになると思います。


 計算が厄介すぎるため、アクセスでは第三の方法を採ることはよほどのことがない限りないと思いますし、私もこれ以上考えたくありません。
 第一の方法が最もアクセス的だと思います。

187 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078188
(SS)C-BOARD v3.8 is Free