No.5です。
では、あまりスマートなやり方ではなくて恐縮ですが・・・
仮に、現在のテーブルの名前を「データテーブル」として、話を進めます。
なお、わからないことがありましたらまたご質問下さい。答えられる範囲でお応えしますので。
準備:
A)「氏名一覧」テーブルの作成
1)新規クエリをデザインビューで開いたら、メニューで「表示(V)」→「SQLビュー(Q)」を選択
2)表示されている「SELECT;」等を削除し、以下のSQL文を貼付:
SELECT DISTINCT データテーブル.氏名 INTO 氏名一覧
FROM データテーブル;
3)このクエリを実行し、「氏名一覧」テーブルを作成
※クエリ自体は、テーブル作成直後に削除して構いません。
B)「各人データ」サブフォームの作成
1)レコードソースに「データテーブル」を指定して新規フォームを作成
2)フォームプロパティの「既定のビュー」に「帳票フォーム」を指定
(「通番」割り当て前にデータを確認しないなら不要)
3)「通番(Class)」フィールドと「データ」フィールドをフォームに追加
4)「各人データ」としてフォームを保存
C)「通番割当」メインフォームの作成
1)レコードソースに「氏名一覧」クエリを指定して新規フォームを作成
2)「氏名」フィールドをフォームに追加
3)コントロールウィザードを使用して、「各人データ」サブフォームを組込
(リンクフィールドには「氏名」を指定)
※サブフォームのサイズ等は必要に応じて設定して下さい※
(特に設定しなくても割り当てはできます)
4)コマンドボタンをメインフォームに追加
5)コマンドボタンの名前に「実行」を指定
6)「通番割当」としてフォームを(仮で)保存
マクロの設置:
1)「通番割当」フォームをデザインビューで開く
2)「実行」ボタンのプロパティシートを表示させる
3)「クリック時」を選択してビルダボタン(「...」)をクリック
4)「ビルダの選択」ダイアログ画面で、「コードビルダ」を選択
5)既定で入力されている「Private Sub 実行_Click()」と「End Sub」を削除し、以下の文を貼付:
Private Sub 実行_Click()
DoCmd.GoToRecord acForm, "通番割当", acFirst
各人処理
MsgBox ("終了しました")
DoCmd.GoToRecord acForm, "通番割当", acFirst
End Sub
Sub 各人処理()
Do While [NewRecord] = False
DoCmd.GoToControl "各人データ"
通番割当
DoCmd.GoToControl "実行"
DoCmd.GoToRecord acForm, "通番割当", acNext
Loop
End Sub
Sub 通番割当()
Do While [各人データ].[Form].[NewRecord] = False
各人データ!通番 = 各人データ.Form.CurrentRecord
DoCmd.GoToRecord , "", acNext
Loop
End Sub
これで「通番割当」フォームを再保存した後、「実行」ボタンをクリックすれば、全てのデータに「通番」を割り当てられるはずです。
※念のため、必ずデータのバックアップを行ってから実行して下さい(汗)※
お礼
ありがとうございました。お蔭様ですべてのデータに連番を割り当てることができました。お手数をお掛けしました。