• ベストアンサー

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

空き番号を求めるために対象になる連番だけの以下のようなテーブルを作りたいのですが 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

noname#135452
noname#135452

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

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

テーブル「ZZZZ連番テーブル」が空の時に以下を実行してみてください。 ADOでの例です。 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

noname#135452
質問者

お礼

ご回答ありがとうございました! 無事に作成できました! ですがコレを実行したらAccessが固まってしまったのですが、これはマシンスペックの問題ですよね・・・(汗) これから空き番号取得し、最小値を求めてみます。 また何かありましたら質問するかもしれませんので、見かけたら助言いただけると幸いです。では

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! たびたびごめんなさい。 先ほどの回答でA列を削除してしまうとエラーになってしまいますので、 B列すべてをコピー → 形式を選択して貼り付けで「値」を選択して C列に貼り付け、A・B列を削除してください。 結局手間がかかる回答になってしまいましたので、 読み流してくださいね。m(__)m

noname#135452
質問者

お礼

ご回答ありがとうございます。 Accessに関する質問だったのでExcelではなかったのですが(笑) 大事な部分を書かずにいてごめんなさい。 Excelこともあまり知らなかったので勉強になります お礼をしておきますね

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! VBAではないので参考程度にしておいてください。 当方使用のExcel2003での回答ですが、 A1セルに「1」を入力 A1セルをアクティブにします。 メニューバーの「編集」 → フィル → 連続データの作成 →  範囲は「列」を選択、種類=加算 増加値=1 停止値=9999 → OK これで1~9999までの連続データが作成されたので B1セル="ZZZZ"&TEXT(A1,"0000") としてオートフィルマーク(+)のところでダブルクリック これでB列にZZZZ0001~ZZZZ9999 が作成されるはずですので A列を削除して完成です。 以上、無理矢理って感じもしますが、参考になれば幸いです。m(__)m

関連するQ&A

  • Accessの連番(文字+日付+文字)2 (泣)

    先だって下記の質問をさせていただいた際には回答いただいてありがとうございました ≪質問≫ 下記のような連番を振る方法を教えてください "Eyymmdd A "E"は固定で yy(西暦2ケタ)mm(月)dd(日)A(Aから始め、同じ日だとB,C,…と最大26(Z)まで)振っていく。日が変わるとまたAから始まる 「テーブル名」連絡文書E 「クエリ名」連絡文書Eクエリ 「フォーム名」連絡文書E 「フィールド名」管理番号(テキスト型) E110105 A E110130 A E110130 B E110130 C E110202 A… と"E"を固定 yy(西暦2ケタ)mm(月)dd(日)Aから始まり、同日であればB,C~と 日が変わるとAからまた始まるという連番をふりたいです ≪いただいた回答≫ Function getNewSeq()   If Format(Date, "yymmdd") = Mid(DMax("管理番号", "連絡文書E"), 2, 6) Then     If Right(DMax("管理番号", "連絡文書E"), 1) = "Z" Then       MsgBox "Zまで一杯です"       Exit Function     End If     getNewSeq = "E" & Format(Date, "yymmdd") & " " & _           Chr(Asc(Right(DMax("管理番号", "連絡文書E"), 1)) + 1)   Else     getNewSeq = "E" & Format(Date, "yymmdd") & " " & "A"   End If End Function さらに、フォームでも デザインビューでフォームのプロパティのイベントの、「レコード移動時」に Private Sub Form_Current() If Me.NewRecord Then Me!管理番号 = getNewSeq End If End Sub 補足をさせていただいたデバックも何度かテーブルからやり直し できるようになりました!! 本当に助かりました しかし、新たにわからない事態が起きてしまいました ご教示下さい フォームを単票形式で作成して、上記の連番が振れるようになりました しかし、データシート(形式)でフォームを作成したところ連番が振られなくなってしまいました 同じAccess内でではなく、新規作成したり、同じAccess内でのフォーム新規作成をしてみましたが、できません データシートでの連番は無理なのでしょうか? 「テーブル名」連絡文書E 「クエリ名」連絡文書Eクエリ 「フォーム名」連絡文書E2 「フィールド名」管理番号(テキスト型) テーブルとクエリは前回と同じものを使いました 何卒ご教示お願いいたします

  • ACCESS2000でコードごとの連番を振るには

    規約違反で削除されましたので再質問させていただきます。 ・access2000で部門コードごとに連番を振りたいが、その際「単価」が入力されていないものは省きたい。 アドバイスを受けて以下のコードを作りましたが、連番を付与したあとで単価を削除しても連番が消えません。その次の数値と同じ連番が入ったままになっています。 文字数の関係で関係のありそうな後半だけしか書くことができませんが、よろしくお願いします。 Set dbs = CurrentDb Set rst = dbs.OpenRecordset(sql) Set fldCode = rst.Fields("部門コード") Set fldNo = rst.Fields("番号") If rst.BOF = False Then rst.MoveLast rst.MoveFirst count = 1 code = "00" Do Until rst.EOF rst.Edit If fldCode <> code Then Select Case fldCode Case "01": count = 21 Case "02": count = 31 Case Else: count = 1 End Select code = fldCode End If If rst.Fields("単価") > 0 Then fldNo = count rst.Update count = count + 1 End If rst.MoveNext Loop End If dbs.Close cmd連番_Click_Err_Exit: Exit Sub cmd連番_Click_Err: MsgBox Error$ Resume cmd連番_Click_Err_Exit End Sub

  • アクセス2000で番号をふりたいです。

    アクセス2000の質問です。よろしくお願いします。 VBAが初めてなので、本を見ながらやってるんですけど なかなか理解できずに困ってます。 今、フォームで番号をふりたいんですけど、連番で 2007001でもH19001でもいいんですが、年&3桁の番号にしたいです。 現状はテーブルが「sheet5」、フォームの番号を出すテキストボックス の所が「連番」にしてあります。ボタン式にしました。 んで自分で考えて打ち込んだのが Private Sub コマンド77_Click() If "連番" / 1000 Is Date Then Me!連番 = DMax("連番", "sheet5") + 1 Else Me!連番 = Format(Date * 1000, "yyyy" & "001") End If End Sub こんな感じでいれたのですが、さっぱり動きません。 きっと見てる方は笑ってると思いますが、私の実力じゃ こんなのしか出来ません。 同じような質問もあったのですが、理解不能でした。 詳しい方、教えてください。

  • 複数シートにわたる連番を自動作成するfunctio

    複数シートにわたる連番を自動作成するfunction関数をoffice 365のEXCELで作りました。 variant型で定義しており、連番途中に右側のセルが空白だった場合、対象セルを空白にし、上のセルが空白だった場合は、数字が出てくるセルまで上に行き+1します。 左端のシート以外の最上のセルは左のシートの最大の数字+1に設定しています。 Function renban1() As Variant Dim temp As Integer, a_row As Long, a_col As Long Dim range1 As Range, ind As Integer Const a_spc = " " ind = ActiveSheet.Index a_row = ActiveCell.Row a_col = ActiveCell.Column renban1 = a_spc Set range1 = Range(Cells(a_row, a_col + 1), Cells(a_row, a_col + 7)) If a_col = 2 And a_row = 5 Then renban1 = 1 Exit Function End If If a_row = 12 And a_col = 2 Then If ind = 1 Then renban1 = 2 Exit Function Else If WorksheetFunction.CountA(range1) = 0 Then '右が空白 renban1 = a_spc Exit Function Else For temp = 80 To 12 Step -2 If ActiveSheet.Previous.Cells(temp, a_col).Value <> a_spc Then '上が空白以外≒数値 renban1 = ActiveSheet.Previous.Cells(temp, a_col).Value + 1 Exit Function End If Next temp End If End If End If If a_row > 10 And a_row < 82 Then '番号のセル範囲 If WorksheetFunction.CountA(range1) = 0 Then '右が空白 renban1 = a_spc Exit Function Else For temp = a_row - 2 To 12 Step -2 If Cells(temp, a_col).Value <> a_spc Then '上が空白以外≒数値 renban1 = Cells(temp, a_col).Value + 1 Exit Function End If Next temp End If End If End Function これで、動作自体は正しいのですが、いちいちセルをクリックしてENTERを押さないと正しく更新されません。(トリガーが無いので当然と言えなくもないのですが) 1シートに35行ほどあり、同様のシートが11枚あるので、出来れば自動で更新させたいのですが、calculateやapplication.volatileを試してもうまくいきませんでした。 VBAにお詳しい方、どうやれば良いか教えて下さい。よろしくお願い致します。

  • [Access]別テーブルの最大値以降の連番振り

    過去の質問を色々調べたのですが、結局以下の連番の振り方が分からず・・・困っています。 どなたか助けて下さい。お願いいたします。 テーブルA(蓄積されている過去テーブル) 伝票番号  顧客NO  注文日 001 111111 2012/11/10 001 111111 2012/11/10 002 222222 2012/11/25 002 222222 2012/11/25 002 222222 2012/11/25 003 333333 2012/12/31 テーブルB(新規にインポートするテーブル) 004 444444 2013/02/01 004 444444 2013/02/01 005 222222 2013/02/15 005 222222 2013/02/15 006 555555 2013/02/15 006 555555 2013/02/15 上記のように、テーブルBをインポートした時に、伝票番号を「004,004,005・・・」という風に 顧客NO毎に連番を振りたいです。 DmaxやDcount関数を使う事はなんとなく分かったのですが、うまくいきません。 出来れば、クエリで実現したいと思ってます。 テーブルAにある顧客がテーブルBに出てきたとしても、関係なく連番が振れれば問題無いので、 テーブルAからは最大値+1の値だけ取れればいいです。 宜しくお願いいたします!!

  • フォームのテキストボックスに一番新しいテーブルの値を入れるには?

    こんにちは、VBA初心者です。アクセス2000を使用してます。 現在、フォームのテキストボックス(年月度)の初期値に、DMAXでテーブルにある(年月度)の値を入れてます。 過去の年月度を入れる時は、手入力で変更してるのですが、続けて入力したい場合、DMAXになってるので、初期値が一番新しい(年月度)になってしまいます。 これを、前回入力した(年月度)を初期値にするには、どうしたらいいでしょうか? Private Sub Form_Current() Dim dbs As Database Dim rst As Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("年月度マスター", dbOpenDynaset) If IsNull(Me![年月度]) Then Me![年月度] = DMax("年月度", "データ") End If If Me![データID] = 0 Then Me!データID = rst![マスターデータID] + 1 rst.Edit rst![マスターデータID] = Me!データID rst.Update rst.Close End If End Sub

  • 文字列に特定の文字の有無を調べたい。

    ある文字列に特定の文字が入っているか否かを調べたいのです。 AccessでVBAを使用して有無を調べたいんです。 具体的には下記の通りです。 カナ氏名が入力されているフィールドを検索して文字列を抽出したいんです。 "抽出"をカナにすると"チュウシュツ"ですよね。 所が私が使用しているテーブルのカナ氏名が入力されているフィールドには "抽出"は"チユウシユツ"と入力されているんです。 "チュウシュツ"と入力しても"抽出"は表示されず、"チユウシユツ"と入力しなければ "抽出"は表示されません。 従って"チュウシュツ"とキーボード入力してから先頭から2文字目と5文字目の "ュ"を"ユ"に再度変換しなければならないんです。 何か簡単な関数やプロシージャがないでしょうか? 何分初心者なんで下記の様な凄く長いプロシージャしか思い浮かびません。 宜しくお願いいたします。 (例) Public Function Kana_change() Dim kana As String '左から2桁目が小文字の時の変換 If Mid(kana, 2, 1) = "ァ" Then kana = Right(kana, 1) & "ア" & Mid(kana, 3, 13) Else kana = kana End If If Mid(kana, 2, 1) = "ィ" Then kana = Right(kana, 1) & "イ" & Mid(kana, 3, 13) Else kana = kana End If If Mid(kana, 2, 1) = "ゥ" Then kana = Right(kana, 1) & "ウ" & Mid(kana, 3, 13) Else kana = kana End If If Mid(kana, 2, 1) = "ェ" Then kana = Right(kana, 1) & "エ" & Mid(kana, 3, 13) Else kana = kana End If If Mid(kana, 2, 1) = "ォ" Then kana = Right(kana, 1) & "オ" & Mid(kana, 3, 13) Else kana = kana End If If Mid(kana, 2, 1) = "ャ" Then kana = Right(kana, 1) & "ヤ" & Mid(kana, 3, 13) Else kana = kana End If If Mid(kana, 2, 1) = "ュ" Then kana = Right(kana, 1) & "ユ" & Mid(kana, 3, 13) Else kana = kana End If If Mid(kana, 2, 1) = "ョ" Then kana = Right(kana, 1) & "ヨ" & Mid(kana, 3, 13) Else kana = kana End If If Mid(kana, 2, 1) = "ッ" Then kana = Right(kana, 1) & "ツ" & Mid(kana, 3, 13) Else kana = kana End If End Sub End Function

  • [Excel VBA]Doloop途中のifで処理を飛ばすには

    久しぶりにお世話になりたいのですが・・・ Do Until 条件 何らかの処理 If条件 Then 何らかの処理 Elseif条件 Then 何らかの処理 Else 何らかの処理 (1)  End if 何らかの処理 Loop というような構文を作った際に(1)のところ(Elseに適合した 場合のみ)でEnd if以下の処理を飛ばして次の周回(? 要はDo~の 最初のところに戻る)にはどうすればよいのでしょうか?

  • フォーム上のテキストボックスにテーブル値を改行代入

    Access2013を使用しています。 フォーム上のテキストボックスにテーブルAの項目Bを複数レコード分を改行しながら 代入したいのです。 Set CN = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "テーブルA", CN, adOpenStatic, adLockOptimistic Do Until rs.EOF   If rs!項目B <> "" Then    Me!テキストボックス = rs!項目B & vbLf   End If   rs.MoveNext Loop 上記ですと、当たり前ですが最終レコードの項目Bのみがセットされます。 検索ワードがよくないのか、同様の問合せを見つけることができません。 よろしくお願いします。

  • 入力判定の仕方が分からなくて、困ってます・・

    VB.NETで、キーボードから入力してLabelに表示されている文字と 合っていれば正解、間違っていれば不正解の処理を1文字単位でやりたいのですが、正解不正解の判定のやり方が分かりません・・。 Private Sub Form1_KeyPress() If Mid(Label2.Text, a, 1) = "入力したのと同じ" Then Mid(Label2.Text, a, 1) = ""     a = a + 1 Else  ’不正解の処理 ?? End If End Sub みたいかな?と思ってプログラムを組んでみたのですが、 ifの"入力したのと同じ"ところの書き方が良く分かりません。 詳しい方、KeyPressの使い方等教えていただけませんか?

専門家に質問してみよう