登録番号を詰めたい2
重要な部分が欠けていたので質問させていただきます。またご教授おねがいします。
以前このような質問をしたものですが、
http://okwave.jp/qa4859369.html
連番がずれてしまっていたので、以前説明できてなかった部分を説明したいと思います。
電話番号や会社名などの個人情報が入っている個人情報テーブル(以下個人T)と
値段や出荷した荷物などの詳細が書かれている注文テーブル(以下注文T)があるとします。
2つのテーブルは"登録番号"とフィールドで関連付けをしてあります。
その登録番号を虫食い無しの綺麗な連番にしたいと思います
以下の様な状態です。
"連番"というのは後の作業で"登録番号"と入れ替えをするために作成されたものです。
注文T 注文T | 個人T 個人T
登録番号 連番 | 登録番号 連番
ZZZZ0001 null | ZZZZ0001 ZZZZ0001
ZZZZ0002 null | ZZZZ0002 ZZZZ0002
ZZZZ0002 null | ZZZZ0003 ZZZZ0003
ZZZZ0004 null | ZZZZ0004 ZZZZ0004
ZZZZ0006 null | ZZZZ0006 ZZZZ0005
(テーブル2には同じ会社から何度も注文がある場合"登録番号"フィールドには同じ"登録番号"が存在する場合がある)
ところが、個人Tには個人情報があるにもかかわらず注文Tには注文された内容が無い場合があります。
以前質問した時に教えていただいたものですと
Private Sub Sample4()
Dim rs As New ADODB.Recordset
Dim i As Integer
Const フィールド名 As String = "☆連番☆" ' ☆1
Const テーブル名 As String = "☆元テーブル☆" ' ☆1
Const 抽出 As String = "☆登録番号☆" ' ☆1
Const 並び替え As String = "☆登録番号☆" ' ☆1
Dim sTmp As String
i = 0
sTmp = ""
rs.Source = "SELECT * FROM " & テーブル名 & _
" WHERE " & 抽出 & " LIKE 'ZZZZ%' ORDER BY " & 並び替え & ";"
rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic
While (Not rs.EOF)
If (rs(並び替え) <> sTmp) Then
i = i + 1
sTmp = rs(並び替え)
End If
rs(フィールド名) = "ZZZZ" & Format(i, "0000")
rs.Update
rs.MoveNext
Wend
rs.Close
End Sub
になりますが、反映させた結果は、
注文T 注文T | 個人T 個人T
登録番号 連番 | 登録番号 連番
ZZZZ0001 ZZZZ0001 | ZZZZ0001 ZZZZ0001
ZZZZ0002 ZZZZ0002 | ZZZZ0002 ZZZZ0002
ZZZZ0002 ZZZZ0002 | ZZZZ0003☆ ZZZZ0003
ZZZZ0004 ZZZZ0003☆ | ZZZZ0004 ZZZZ0004
ZZZZ0006 ZZZZ0004 | ZZZZ0006 ZZZZ0005
と、いうものになります。
本来個人情報だけがある登録番号(ZZZZ0003)に、登録番号(ZZZZ0004)の情報が加わってしまうのです。
したがってまったく関連がない会社同士の情報が混ざってしまうのです
(個人情報しかない"登録番号"でずれてしまう)
教えていただいたものは完璧だったのですが、私が情報の足りない質問をしてしまったのが失敗でした・・・申し訳ありません。
注文T 注文T | 個人T 個人T
登録番号 連番 | 登録番号 連番
ZZZZ0001 ZZZZ0001 | ZZZZ0001 ZZZZ0001
ZZZZ0002 ZZZZ0002 | ZZZZ0002 ZZZZ0002
ZZZZ0002 ZZZZ0002 | ZZZZ0003 ZZZZ0003
ZZZZ0004 ZZZZ0004 | ZZZZ0004 ZZZZ0004
ZZZZ0006 ZZZZ0005 | ZZZZ0006 ZZZZ0005
注文Tがこのような形になるのが理想なのですが、どのように連番を振る途中で飛ばすのか分かりません。
だいぶVBAが変わってしまいそうな気もしますが、どうかよろしくお願い致します。
お礼
たいへん参考&勉強になりました!ありがとうございました。