• ベストアンサー

登録番号を詰めたい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が変わってしまいそうな気もしますが、どうかよろしくお願い致します。

noname#135452
noname#135452

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

私も考え方は、#1、#2さんと同じです。 同じ事を書いていると思いますが、 既に個人Tの連番に新しい連番を振っている(?)ので、注文Tの登録番号(旧体系)と個人Tの登録番号(旧体系)を関連付けて個人Tの連番を引っ張ってくれば良いと思います。 Private Sub Sample5()   Dim sSql As String   sSql = "UPDATE 注文T INNER JOIN 個人T ON 注文T.登録番号=個人T.登録番号 SET 注文T.連番 = 個人T.連番;"   CurrentProject.Connection.Execute sSql End Sub (実行は、データをバックアップしてから) > 引用するだけですと注文Tの連番は空きがなくなってしまいませんか? > 会社名だけわかっていて注文を受けていない登録番号もありますので・・・ ここの部分、もう少し分かりやすく説明してもらえませんか?

noname#135452
質問者

お礼

お礼から失礼します。 教えていただいたものをそのまま試してみました。 実行はできそうなのですが、エラーが出てしまいました。 「指定されたデータ量がフィールドサイズを超えています。データ量を減らし、挿入または貼り付けを行って下さい」 となってしまいます。 これは補足で書きました個人T連番の書き込み制限である12文字だと思います。 データシートで注文T連番に12文字で入力しようとすると強制的に8文字にされてしまいます。 Dim ID As String ID ="個人T.連番" ID = Mid$(ID, 5) など試してみましたがだめでした。根本的に私の書き方が悪いのだと思いますが・・・ 考え方としてはXXXXを抜いてから注文T連番へ、でいいとは思うのですが 何かいい案はありますでしょうか?

noname#135452
質問者

補足

ご回答ありがとうございます。 >既に個人Tの連番に新しい連番を振っている(?) そうです。空き番号のない連番が振られている状態です、情報が足りなくて申し訳ありませんでした>< 不一致クエリでどれが中身のない登録番号かは分かったのですがVBAでの書き方がわかりませんでした・・・ > 引用するだけですと注文Tの連番は空きがなくなってしまいませんか? > 会社名だけわかっていて注文を受けていない登録番号もありますので・・・ これは、引用というのを完全にコピーして貼り付けをする。 という風に理解してしまったのでこの様に書いてしまいました。 実際には登録番号(旧体系)を関連付けてある場合は引用をして、無い場合は飛ばす。と言う事だったのですね また追加してしまって申し訳ないのですが、個人T連番には書き込み制限がありまして、12文字でないとDBにアップロードできないようでした。 なので 注文T     注文T    | 個人T     個人T 登録番号    連番     | 登録番号    連番 ZZZZ0001   ZZZZ0001   | ZZZZ0001    XXXXZZZZ0001 ZZZZ0002   ZZZZ0002   | ZZZZ0002    XXXXZZZZ0002 ZZZZ0002   ZZZZ0002   | ZZZZ0003    XXXXZZZZ0003 ZZZZ0004   ZZZZ0004   | ZZZZ0004    XXXXZZZZ0004 ZZZZ0006   ZZZZ0005   | ZZZZ0006    XXXXZZZZ0005 と、なっています。 この余分なXXXXを取るには 個人T連番 = Mid$(個人T連番, 5) このような形を取れば外すことはできるのでしょうか?

その他の回答 (3)

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.4

#1です > UPDATE 注文T SET 注文T.連番 = DLookUp("連番","個人T","登録番号 = '" & [登録番号] & "'"); これは、「個人T.登録番号」に、プライマリキー(主キー)の割り当てがされていない前提で、考慮したため・・・JOIN句を使わず、DLookUp関数で、「個人T」から、引用してます > 更新クエリは注文Tから登録番号と連番を選択するだけですよね? 違うと思うけど??? 更新クエリで、「注文T」から、「連番」を選択し DLookUp("連番","個人T","登録番号 = '" & [登録番号] & "'") 値を更新していると言う状態ですよ 普通は、クエリは、言葉で説明せずに、SQLビューに切り替えて、SQL文というのを貼り付けてるだけですので・・・ コピー&ペーストで、大体、終わるはずで、打ち直しの必要が、ありませんが・・・実際のテーブル名、フィールド名が違う場合、自分で書き換えになります で、 > XXXXZZZZ0005 など、なら・・・「Right(~,8)」で、右から8文字切り取れば良いという事ね 他に、補足を読めば読むほど、判らないのですが・・・ 「注文T」の「連番」って・・・発注元の会社登録番号?(=個人T.登録番号) これなら、更新クエリで行わず(余分なデータと思われる)、常時、選択クエリで良いような気がするのですが・・・ SELECT 注文T.登録番号, Right(個人T.連番,8) As New連番 FROM 注文T INNER JOIN 個人T ON 注文T.登録番号 = 個人T.登録番号; って、感じね これが、主キーの割り当てをしておらず、更新可能なクエリにならないので、何とか!っと、言うことなら、DLookUp関数で SELECT 注文T.登録番号, Right(DLookUp("連番","個人T","登録番号 = '" & [登録番号] & "'"),8) AS New連番 FROM 注文T; と、言う感じ・・・

noname#135452
質問者

補足

ご回答ありがとうございます。 >「注文T」の「連番」って・・・発注元の会社登録番号?(=個人T.登録番号) この連番を振っている理由としまして、 仮に振っている新登録番号なのです。旧体系の注文T.登録番号と仮連番である注文T.連番を入れ替える、もしくは注文T.連番を注文T.登録番号に上書きしたかったのです。 Right(個人T.連番,8)を参考に#3さんのコードでやってみたところ うまく連番を振ることが出来ました。 説明が下手で申し訳ありませんでした・・・

  • ple_mania
  • ベストアンサー率42% (9/21)
回答No.2

こんばんは。 わたしもDxakさんと同意見ですね。 最初に提示された個人Tは既に登録番号の新旧対照表に なっているという認識です。したがって、個人Tを1件 ずつ読みながら、登録番号が一致する注文Tの連番を 個人Tの連番で更新してあげれば望んだ状態になると 思われます。 残念なことにDAOのコードばかり見ている間に、ADOの コードは忘れてしまったので、コード自体の提示は 控えます。 認識相違があれば読み飛ばしてかまいませんが、 参考になるようならご自身で実装されたコードを こんな観点で見直してみてはいかがでしょう。

noname#135452
質問者

補足

ご回答ありがとうございます。 >最初に提示された個人Tは既に登録番号の新旧対照表に なっているという認識です。 はい、その認識で問題ありません。個人T連番は空きの無い完璧な連番です そういう補足が足りなかったですね・・・申し訳ありませんでした。 同じ登録番号があるときにのみ、その登録番号のレコードにある連番で更新 といった考え方でしょうか。なるほど、動きがわかりました! #1さんの引用とはこう言う事だったのですね。読解力が無くてすみませんでした

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.1

もう少し判りやすく説明が、ならないでしょうか? 読んでる途中で、挫折しましたorz で・・・結果だけ見れば、注文Tの登録番号をキーに、個人Tの連番を引用しているだけのように見えます それなら更新クエリで UPDATE 注文T SET 注文T.連番 = DLookUp("連番","個人T","登録番号 = '" & [登録番号] & "'"); で、終わりますが??? もう少し規則性、法則性を、判りやすく、まとめてみて下さい

noname#135452
質問者

補足

ご回答ありがとうございます。 長くなってしまって申し訳ありません。 重要なのは >本来個人情報だけがある登録番号(ZZZZ0003)に、登録番号(ZZZZ0004)の情報が加わってしまうのです。 ということです。ずれて違う会社の注文が登録されてしまうこと・・・ 引用するだけですと注文Tの連番は空きがなくなってしまいませんか? 会社名だけわかっていて注文を受けていない登録番号もありますので・・・ 教えていただいた更新クエリをやってみたのですが、指定した式の構文が正しくありません。となってしまいました。 更新クエリは注文Tから登録番号と連番を選択するだけですよね? 式は連番のレコードの更新に書き込みました。

関連するQ&A

  • 登録番号を詰めたい

    いつもお世話になっています。また詰まってしまったので質問させていただきます。 以前、こちらの質問でお世話になりました。 http://okwave.jp/qa4848965.html そしてそのとき教えていただいたのが Private Sub Sample3()   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   i = 1   rs.Source = "SELECT " & フィールド名 & " FROM " & テーブル名 & _         " WHERE " & 抽出 & " LIKE 'ZZZZ%' ORDER BY " & 並び替え & ";"   rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic   While (Not rs.EOF)     rs(フィールド名) = "ZZZZ" & Format(i, "0000")     rs.Update     rs.MoveNext     i = i + 1   Wend   rs.Close End Sub でした。こちらは登録番号を昇順に並べて別のフィールドに連番を振る といったものでした。 ですが今回は少し条件が加わりまして この登録番号は1種類の番号でも複数存在するのです これをつめたいのですが、現状ですと (現状)   ZZZZ0001    ZZZZ0001 ZZZZ0002    ZZZZ0002 ZZZZ0002    ZZZZ0003 ZZZZ0004    ZZZZ0004 となってしまいます。 これを (改良後)  ZZZZ0001    ZZZZ0001 ZZZZ0002    ZZZZ0002 ZZZZ0002    ZZZZ0002 ZZZZ0004    ZZZZ0003 とするにはどうしたらいいでしょうか 何かいい案はありますでしょうか?よろしくお願いします

  • クエリで求めた空き番を登録したい

    詰まってしまったので質問させていただきます。 登録番号の空き番号を求めることが出来るクエリを使い空いている番号を埋めたいと思います。 個人T…テーブル。空き番号をもつ"登録番号"フィールドと空き番号がない綺麗な"連番"フィールドを持つ ZZZZ空き番号抽出クエリ…"登録番号"の空き番号を昇順で並べた"仮想ID"がある Private Sub Sample6() Dim Db As DAO.Database Dim rs As DAO.Recordset Dim i As Variant Dim J As Variant Set Db = CurrentDb Set rs = Db.OpenRecordset("個人T") J = Right(DMax("連番", "個人T"), 4) i = 0 While i < J rs.AddNew i = DMin("仮想ID", "ZZZZ空き番号抽出クエリ") →→ rs(登録番号) = "ZZZZ" & i rs.Update rs.MoveNext Wend End Sub これで実行すると「このコレクションには項目がありません。」 と「rs(登録番号) = "ZZZZ" & i」がエラーになってしまいます。 書き方自体が悪いのはものすごく分かるのですが・・・ どこを直したら正常に空き番号を埋めることができるでしょうか?

  • ODBC--リンクテーブル'XXXX'での更新に失敗しました

    同じ現象がなさそうでしたので質問させていただきます。 インポートしたテーブルであれば問題なくレコードの更新が出来るのですが 実際のODBCで繋いだDBでは「ODBC--リンクテーブル'XXXX'での更新に失敗しました」となってしまいます。 DAOとADO両方試してみました。以下のものになります こちらは教えていただいたものです。 Private Sub Sample3() 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 i = 1 rs.Source = "SELECT " & フィールド名 & " FROM " & テーブル名 & _ " WHERE " & 抽出 & " LIKE 'ZZZZ%' ORDER BY " & 並び替え & ";" rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic While (Not rs.EOF) rs(フィールド名) = "ZZZZ" & Format(i, "0000") rs.Update rs.MoveNext i = i + 1 Wend rs.Close End Sub ADOだからダメなのかと思い こちらは教えて頂いたものをDAOにしてみました。 Private Sub Sample3() Dim Db As DAO.Database Dim rs As DAO.Recordset Dim i As Integer Const フィールド名 As String = "連番" ' ☆1 Const テーブル名 As String = "元テーブル" ' ☆1 Const 抽出 As String = "登録番号" ' ☆1 Const 並び替え As String = "登録番号" ' ☆1 i = 1 Set Db = CurrentDb() Set rs = Db.OpenRecordset("SELECT " & フィールド名 & " FROM " & テーブル名 & " WHERE " & 抽出 & " LIKE 'ZZZZ*' ORDER BY " & 並び替え & ";") While (Not rs.EOF) rs.Edit rs(フィールド名) = "ZZZZ" & Format(i, "0000") rs.Update rs.MoveNext i = i + 1 Wend rs.Close End Sub 両方とも「ODBC--リンクテーブル'XXXX'での更新に失敗しました」 となってしまいます。 どうすれば更新に失敗せずにできるのでしょうか?

  • クエリで抽出したデータに書き込みたい

    どうしても分からなくなってしまったので、質問させていただきます。 以前、連番フィールドだけのテーブルを作りたいと質問して以下のような回答を頂きました。もちろん回答内容で連番フィールドの作成はできました。 Private Sub Sample1()   Dim rs As New ADODB.Recordset   Dim i As Integer   rs.Open "ZZZZ連番テーブル", CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic   For i = 1 To 9999     rs.AddNew     rs("仮想ID") = "ZZZZ" & Format(i, "0000")     rs.Update   Next   rs.Close End Sub そして今回は、また連番を振りたいのですが 今回は条件が加わっていまして、元テーブルからまずクエリで既存データの登録番号を昇順(空き番号ではないが番号が所々飛んでいるもの)で抽出します。 この虫食いのように飛んでいる番号を綺麗に連番にしようと思い、まずは別フィールドに変更したい連番のフィールドを作成したいのですが。 これがうまくいきません。 上に記述したVBAでは既にレコードがあるデータにAddNewが有効でないのは分かるのですが、 どのようにすれば元テーブルから抽出クエリ(昇順で抽出したデータ)を使って 別フィールドに連番を振ることができるのでしょうか? フィールドを書き換えるのではなく別フィールドに連番を振るだけなのですが・・・

  • AccessVBA値の入替えNullの使い方が不正

    以前こちらで教えていただいのですが、 http://okwave.jp/qa/q8086569.html 以下のクエリを実行すると、「Nullの使い方が不正です」とのエラーが出てしまいます。 ------------------------------------ テーブル名「T9」 フィールド:顧客番号(テキスト)/ 売上金額(通貨) / 売上月(テキスト テーブル名「T9A」 フィールド:顧客番号(テキスト)/ 集約先番号(テキスト) ●標準モジュール Public Function Bango(sSrc As String) As String   Dim rs As New ADODB.Recordset   Dim sR As String   sR = sSrc   rs.Source = "SELECT * FROM T9A WHERE 顧客番号='" & sSrc & "';"   rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly   If (Not rs.EOF) Then sR = Bango(rs("集約先番号"))   rs.Close   Bango = sR End Function ●クエリ SELECT Bango(顧客番号) AS 集約番号, Sum(売上金額) AS 売上金額計, 売上月 FROM T9 GROUP BY Bango(顧客番号), 売上月; ------------------------------------ 当初は、テーブル「T9A」には集約先番号を持つ顧客番号のみにするはずでしたが、 便宜上、集約先番号の有無にかかわらず、すべての顧客番号が入ったテーブルを使います。 そのため、「T9A」の集約先番号にはNullがあり、 Nullに対しては、同行の顧客番号を返すように対応したいです。 If IsNull(集約先番号) Then・・・とやるのかな?と浮かびましたが、うまくいかず、困っております。 何卒ご指南くださいますよう、お願いいたいます。

  • SELECT CASEについての質問です

    以前教えていただいたコードがあるのですが どうしても分からない部分があったので質問させていただきます Private Sub Sample77()   Dim rs As ADODB.Recordset   Dim rsUP As New ADODB.Recordset   Dim i As Integer   Dim iCount As Long   iCount = 0   rsUP.Source = "SELECT * FROM 個人T WHERE 登録番号 LIKE 'ZZZZ%' ORDER BY 登録番号;"   rsUP.Open , CurrentProject.Connection, adOpenKeyset, adLockOptimistic   Set rs = rsUP.Clone(adLockReadOnly)   While (Not rsUP.EOF)     iCount = iCount + 1     Debug.Print iCount & " 件目 " & rsUP("登録番号")     rs.Filter = "[連番] = 'XXXX" & rsUP("登録番号") & "'"     If (Not rs.EOF) Then       For i = 0 To rsUP.Fields.Count - 1         Select Case rsUP.Fields(i).Name         ☆           Case "登録番号", "連番"           ☆           Case Else                  ☆             rsUP.Fields(i).Value = rs.Fields(i).Value☆         End Select       Next       rsUP.Update     End If     rsUP.MoveNext   Wend   rs.Close   rsUP.Close   Set rs = Nothing End Sub ☆の部分の動作がどうしてもわかりません。 "登録番号"と"連番"以外のフィールドを別レコードへ移動できるのですが 調べてもCASEの後にはなにか条件に当てはまった場合の処理を書く必要があると思うのですが 今回のコードにはそれが無いように思えます。 ☆の部分の動作を教えていただけないでしょうか よろしくお願いします。

  • テーブルの左端に通し番号を付ける

    教えてください! 下記のモジュールで走らせると、 「ユーザ定義型は定義されていません」 と表示が出て止まってしまいます。 要は、左端の「No.」という列に 通し番号を入れたいのですが・・・。 Option Compare Database Sub setNumber(tblname As String, fldname As String) Dim db As DAO.Database Dim rs As DAO.Recordset Dim ssql As String Dim dblCnt As Double Dim strCnt As String dblCnt = 0 Set db = CurrentDb() ssql = "SELECT * FROM " & tblname Set rs = db.OpenRecordset(ssql) rs.MoveFirst Do While Not rs.EOF dblCnt = dblCnt + 1 strCnt = Format$(dblCnt, "00000000") rs.Edit rs.Fields(fldname).Value = strCnt Debug.Print strCnt rs.Update DoEvents rs.MoveNext Loop End Sub Sub Execute() Call setNumber("◎テーブル1", "No.") End Sub

  • 2つのテーブルで使っているフィールドの編集

    電話番号や会社名などの個人情報が入っているテーブル1と 書き込んだ日付や出荷した荷物などの詳細が書かれているテーブル2があります。 (テーブル2には同じ会社に対して何種類か書いているので"登録番号"フィールドには同じ"登録番号"が存在する場合がある) この2つのテーブルを現在"登録番号"で繋いでいる状態なのですが、 この"登録番号"は穴空き連番になっている状態です。 この穴空き連番を綺麗な連番に変えたいと思っています。 なので穴空き連番と別フィールドに仮に振った綺麗な連番に書き換えたいと思っています。 作業順としては (1)"登録番号"と"連番"を最小値から比較していき、"登録番号"の空きを探す (2)"登録番号"の空きが見つかったらコレを一時保存、連番も一時保存 (3)次に登録されている"登録番号"を探す。 (4)"登録番号"発見したら、一時保存していた"登録番号"に一時保存していた"連番"を入れる *テーブル2には"登録番号"が複数ある場合があるため複数あるものはすべてコピー といった作業を繰り返したいのですが、 伝わりますでしょうか・・・ 分かりにくい場所は多いと思いますが何かいい案はありますでしょうか 他にこうした方が簡単というものがあれば教えてください。 ヒントでもいただければと思い質問しました。

  • Access VBAで int型にnullを入れる方法について

     Access で作ったテーブルの数値型のフィールド「金額」にnullを入れたいと思い、四苦八苦しています。  以下のソースを書いたのですが、値には「0」が入ってしまい、nullが挿入されません。 Dim a As Long Dim SQL1 As String If IsNull(Me.摘要_会員番号) = True Then IsNull (a) Else a = Me.摘要_会員番号 End If SQL1 = "UPDATE 個人情報入金 SET 個人情報入金.金額 = " & a & ";" DoCmd.RunSQL SQL1  その他、a=null や、a=''をやってみたのですがこれでは入らず、String型ではないので、スペースも入りません。  nullで無くても、目で見てデータが見えない状態であればいいのですが、そのようにupdateをかける方法をしっている方、是非ご教授をお願いします。

  • 連番のみのテーブルの作成

    空き番号を求めるために対象になる連番だけの以下のようなテーブルを作りたいのですが ZZZZ0001からZZZZ9999まで登録してあるだけのテーブルを作りたいのです 1つ1つ書き込んでは時間がかかるので・・・自動でレコード追加したいのですが DoLoopやIfを使ってやってみましたがまったく書き込めもしませんでした (PCが動作開始するだけ) テーブルはID(オートナンバー)仮想ID(テキスト型)のみです 書き込んであるのはZZZZ0001のみになります。 DoLoopやIfを使って実現することはできますでしょうか ひどい作りではありますがVBAはこんな感じでした やりたいことが伝わればいいのですが・・・ たくさん修正箇所はあると思いますがどうぞよろしくお願いします。 Do Until a = 100 a = DMax("仮想ID", "ZZZZ連番テーブル") a = Mid$(a, 5) a = (a + 1) If a >= 1000 Then テキスト0 = "ZZZZ" & a Else If a >= 100 Then テキスト0 = "ZZZZ0" & a Else If a >= 10 Then テキスト0 = "ZZZZ00" & a Else テキスト0 = "ZZZZ000" & a End If End If End If a = a + 1 仮想ID = "ZZZZ" & a Loop

専門家に質問してみよう