![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.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)
で、後々修正が要らなくなります。
(テーブルの内容を書き換えるだけの修正になります)
No.4
- 回答日時:
追加です。
セミナー数が増えれば、初期設定を
セミナーA 1000
セミナーB 2000
・・・
・・・
セミナーP 15000
のように初期番号を増加しておけば
簡単に対応できます。
あるいは、人数が1万人くらいに
なるのであれば、
セミナーA 100000
のように桁を最初から上げておけば
済みます。以上です。
No.3
- 回答日時:
> 講座名ごとに受付番号を自動採番
この辺りのテーブル構成、各テーブル間の結び付きはどのようになっているのでしょうか。
各セミナーは、何回も開催するものでしょうか。
その開催回数に関係なく割り振ってもいいのでしょうか。
回数ごとに重複したものを使ってもいいのでしょうか。
(例えば、回数(何回目)が変われば、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つで、セミナーが終わると、そのセミナーの受付テーブルの情報は削除します。
No.1
- 回答日時:
いろいろ方法はあります。
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つです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 外国株 株式投資講座 株式投資セミナー ほとんど 我流か 詐欺まがい まともな投資講座は皆無。 世界的投資家 1 2023/01/25 00:19
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- ビジネス・マネー 信頼する先輩がしていた経営セミナーに申し込み、40万円を支払いました。説明会で納得した後に申込んだの 15 2023/04/12 08:50
- 郵便・宅配 佐川急便の不在連絡票で「電話番号でお問い合わせお願いします」と書かれて担当者名・電話番号はあるのです 2 2022/04/14 11:10
- SOHO・在宅ワーク・内職 友達の嫁が在宅セミナー講師をやると聞きました。 その嫁がzoomで講師となって受講者と話すとお金が入 2 2023/08/17 20:09
- 確定申告 公金受取口座登録後、e-Taxで口座情報を入力する必要はありますか 2 2022/05/09 06:48
- 外国株 投資セミナー講座は 全てぼったくりか 詐欺か、まあ まともな投資は自分自身で 学ぶ物らしい。 米国株 2 2022/12/06 11:53
- その他(IT・Webサービス) CICでの情報開示について CICのインターネット開示を利用しているのですが、必要事項を入力後に確定 1 2023/04/04 16:11
- その他(ニュース・時事問題) 「マイナポイント」の登録について 5 2022/12/12 22:36
- 政治 日本のマイカードはあまりに遅すぎです 7 2023/04/02 18:36
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
Accessでのレコード存在チェック
-
access 自動採番 年が変わる...
-
最新の日付とその金額をクエリ...
-
ACCESSでの行番号の自動採番
-
access2003で学籍番号から生徒...
-
【Access】選択クエリのグルー...
-
access 請求番号の自動採番
-
【アクセスVBA】テーブルにフィ...
-
【SQL】existsでの商演算
-
候補キーの求め方
-
SQL (insert文)文の質問です。
-
Access:抽出して、色をつけたい。
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
SELECTで1件のみ取得するには?
-
アクセスでレポートの1印刷内...
-
Excelで、改行がある場合の条件...
-
SQL文で右から1文字だけ削除す...
-
GROUP BYを使ったSELECT文の総...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
access 自動採番 年が変わる...
-
最新の日付とその金額をクエリ...
-
Accessでのレコード存在チェック
-
【アクセスVBA】テーブルにフィ...
-
アクセスで「空き番」の確認
-
vba 直前の操作はキャンセルさ...
-
条件をつけて日付の古い行を抜...
-
質問です。 下記のテーブルとデ...
-
【Access】選択クエリのグルー...
-
[Access]異なるレコード間の文...
-
Access:抽出して、色をつけたい。
-
Access 文字+年ごとの自動採番
-
Accessで日付が変わると番号が...
-
access 自動採番 「10-AA-000...
-
Recordset.FindFirstについて
-
ACCESSでの行番号の自動採番
-
access2003で学籍番号から生徒...
-
【SQL】existsでの商演算
-
サイベースには、オラクルのROW...
おすすめ情報