dポイントプレゼントキャンペーン実施中!

講座名ごとに受付番号を自動採番したいのですが、出来るのでしょうか?

テーブル名 セミナー受付(講座名、受付番号・・・)
講座名     受付番号
セミナーA   1001、1002、1003のように連番
セミナーB   2001、2002、2003のように連番

他のサイトを見ても解決できなかったので、ご指導をお願いします。

A 回答 (5件)

#3です



コンボボックス「セミナー名」のクリック時イベントに以下を記述してみてください。

Private Sub セミナー名_Click()
  Dim iNumS As Long
  Dim vTmp As Variant

  If (IsNull(Me.セミナー名)) Then
    Me.受付番号 = Null
    Exit Sub
  End If

  Select Case Me.セミナー名
    Case "セミナーA": iNumS = 1000
    Case "セミナーB": iNumS = 2000
    Case "セミナーC": iNumS = 3000
  End Select

  Me.受付番号 = Nz(DMax("受付番号", "セミナー受付", "セミナー名 ='" & Me.セミナー名 & "'"), iNumS) + 1
End Sub


※ 
選択したセミナー名の採番初期値を設定しておきます。
セミナー受付テーブルから、登録されているセミナー名の受付番号最大値を求めます。
なかったら、採番初期値+1を、あったら、最大値+1を受付番号に設定します。


※ この書き方になるとセミナー名が変わったとか・・・で修正が必要になります。
そこでコンボボックスに非表示で採番初期値を設定しておきます。

テーブル「T講座一覧」
講座ID 講座名  採番初期値
1   セミナーA  1000
2   セミナーB  2000
3   セミナーC  3000

コンボボックスの値集合ソースは、
SELECT 講座名, 採番初期値 FROM T講座一覧 ORDER BY 講座名;
として、
連結列: 1
列数: 2
列幅:4cm;0cm (2列目を表示しないように0に:4部分は適当に)

としておけば、

  Select Case Me.セミナー名
    Case "セミナーA": iNumS = 1000
    Case "セミナーB": iNumS = 2000
    Case "セミナーC": iNumS = 3000
  End Select

部分は、

  iNumS = Me.セミナー名.Column(1)

で、後々修正が要らなくなります。
(テーブルの内容を書き換えるだけの修正になります)
    • good
    • 0
この回答へのお礼

ありがとうございます!!
出来ました!
また宜しくお願いします。

お礼日時:2010/03/17 12:36

追加です。

セミナー数が増えれば、
初期設定を
セミナーA 1000
セミナーB 2000
・・・
・・・
セミナーP 15000
のように初期番号を増加しておけば
簡単に対応できます。
あるいは、人数が1万人くらいに
なるのであれば、
セミナーA 100000
のように桁を最初から上げておけば
済みます。以上です。
    • good
    • 0

> 講座名ごとに受付番号を自動採番



この辺りのテーブル構成、各テーブル間の結び付きはどのようになっているのでしょうか。

各セミナーは、何回も開催するものでしょうか。

その開催回数に関係なく割り振ってもいいのでしょうか。
回数ごとに重複したものを使ってもいいのでしょうか。
(例えば、回数(何回目)が変われば、1からの採番で構わないとか)

講座名ごとに割り振った番号を使いきった時とかは、どのように?

講座数は9つまででしょうか。

すみませんが、もう少し具体的な環境が提示されればと思います。


ご質問の内容だけであれば
セミナーAの次の受講番号を求めるには、、
Int(受付番号 / 1000) が 1 の最大受付番号を求め、それに+1すればよいと思います。

新受付番号 = Nz(DMax("受付番号","セミナー受付","Int(受付番号 / 1000) = 1"),1000) + 1

フォームで単票形式なら、= 以降を既定値に設定しておけばよいと思います。
セミナーAの時は、
=Nz(DMax("受付番号","セミナー受付","Int(受付番号 / 1000) = 1"),1000) + 1

セミナーBの場合は、Int(受付番号 / 1000) が 2 を・・・

※フォームを使っていはいけない???


講座部分に特化したテーブル構成を考えてみましたが、どうでしょうか。

テーブル「T講座一覧」
講座ID 講座名  採番開始値
1   セミナーA  1000
2   セミナーB  2000

テーブル「T講座開催」
講座開催ID  講座ID  採番開始値  開催日    開催場所
1        1      1000     2010/03/16

テーブル「T講座受講一覧」
an 講座開催ID 受講番号 氏名 備考
1   1       1001    AAAA


講座開催登録時の採番開始値は既定値としてT講座一覧から拾ってきますが、修正が可能なようにします。
(修正が不要であれば、項目自体要りませんが)

T講座受講一覧での受講番号の既定値は、講座開催IDの採番開始値+1を初期値として使用します。
(講座開催IDは、一意にするためのものなので、オートナンバーでも)

特に問題がなければ、採番開始値は1で十分で、講座開始ID毎に重複しても問題は発生しないと思います。
(採番開始値自体要らないと思います)

別に、講座開催部分に、何回目、の項目を増やしても良いと思います。

また、氏名部分は、氏名ID の様に他を参照する形でも良いと思います。

※ 対外的に出す番号としては、クエリとかで、
[講座ID] & Format([開催日],"yymm") & Format([受講番号],"000")
とかの8桁以上を使うとか・・・

この回答への補足

早速の回答ありがとうございます!

言葉足らずですみません。補足をします。
受講者テーブル(受講者ID、名前、住所・・・)
セミナー受付テーブル(受付ID、受講者ID、受付日、セミナー名、受付番号・・・)
となっていて、受講者IDでリレーションを組んで、受付フォームを作っています。

受付フォームで新規登録する際、セミナー名をプルダウンで選ぶと、受付番号が採番される形を作りたいです。
セミナーの個数は最大で3つで、セミナーが終わると、そのセミナーの受付テーブルの情報は削除します。

補足日時:2010/03/17 10:52
    • good
    • 0

少し訂正。


>MsgBox ("講座がありません")
をコメントアウトするか削除してください。
変なところにおいてしまいました。
    • good
    • 0

いろいろ方法はあります。


DLookup関数を使う方法もありますが、
一つの案として関数を作ってみました。
テーブルを一つ用意します。
テーブルの名前を受付番号管理とします。
フィールドは、講座名(テキスト型)、
受付番号(数値型)とします。
使用前はテーブルに、
セミナーA 1000
セミナーB 2000
セミナーC 3000
セミナーD 4000
などのように初期設定しておきます。

次に以下の関数を標準モジュールに
貼り付けます。DAOなので参照設定
でDAOにチェックをいれてください。

Function func番号発行(strSemi As String) As Long
Dim db As Database
Dim rs As Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("受付番号管理", dbOpenDynaset)

rs.MoveFirst
Do Until rs.EOF
If rs!講座名 = strSemi Then
'関数に更新した番号を返す
func番号発行 = rs!受付番号 + 1
'テーブルの番号を更新しておく
rs.Edit
rs!受付番号 = rs!受付番号 + 1
rs.Update
Exit Do
End If
rs.MoveNext
Loop
MsgBox ("講座がありません")
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Function

関数の説明をします。
Function func番号発行(strSemi As String) As Long
は関数の引数に講座名を指定します。strSemiの部分です。
この講座名を受付管理番号から探し、あれば
同じレコードの受付番号の番号に1を加えた
ものを関数に返します。
この帰ってきた番号をプログラムの中で
使用します。

たとえば、フォームやクエリなどで使う
場合はこの関数を少しアレンジする
必要がでてくるかもしれません。
どの場面で使用するのかわかれば
簡単にアレンジできるのですが。

この回答への補足

早速の回答ありがとうございます!
言葉足らずで申し訳ございません。


補足をします。
受講者テーブル(受講者ID、名前、住所・・・)
セミナー受付テーブル(受付ID、受講者ID、受付日、セミナー名、受付番号・・・)
となっていて、受講者IDでリレーションを組んで、受付フォームを作っています。

受付フォームでセミナー名をプルダウンで選んで、新規登録すると、受付番号が採番される形を作りたいです。
セミナーの個数は最大で3つです。

補足日時:2010/03/17 10:33
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す