- ベストアンサー
初心者なのですが・・・accessで抜けている番号を探すには?
すみません。検索してみたのですが見つからなくて・・・ぜひ教えてください。 使っているのは、ACCESS97です。 ある伝票の整理番号が連番になっています。データは入力されています。 抜けている整理番号を調べたいのですが、どういった方法があるでしょうか? クエリーでもできるでしょうか? 困ってしまってますので、なにとぞよろしくお願いします!
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >で、せっかくなので実際やってみてからお返事したい!と思ってぺたぺた張ってみたりしたのですが、 >どうもうまくできなくて・・・ >何しろ初めてなので、何もわからなくって。 ごめんなさい。よく質問を読んでいませんでしたのでとんちんかんなレスをしたかもしれません。 どんなエラーが出るかによりますが、 「パラメータが少なすぎます。? を指定してください。」 と出た場合は「ID」と書いている全ての文字を「整理番号」に変更してみてください。 >StSQL = "select 整理番号 from テーブル1 order by 整理番号" >If RS!整理番号 = i Then 上記3カ所 「入力テーブルまたはクエリ '???' が見つかりませんでした。そのテーブルやクエリが存在していること、 または名前が正しいことを確認してください。」 と出た場合は、テーブル名が違っていますので以下の「テーブル1」の部分を修正してください。 >StSQL = "select 整理番号 from テーブル1 order by 整理番号" それ以外のエラーが出る場合は補足に書いてください。 あと、この方法では、大量に抜けているデータが存在する場合は、取得したデータをテーブルに書き込むなどの工夫が必要です。 #3のstorkさんが回答した方法等で解決しているのであれば、こんなやり方もあるんだ、くらいに思ってください。
その他の回答 (4)
- sgh
- ベストアンサー率61% (75/121)
こんにちは。 以下のコードで実現できます。 テーブル名が「テーブル1」、ID列が「ID」で1から始まっているという前提です。 下記コードを貼り付けて、テーブル名を編集し実行するとイミディエイトウインドウに抜けたIDが表示されます。 一応実験済み。 Sub test1() Dim DB As DAO.Database Dim RS As DAO.Recordset Dim StSQL As String Dim i As Long Dim Flag As Boolean Set DB = CurrentDb StSQL = "select ID from テーブル1 order by ID" Set RS = DB.OpenRecordset(StSQL) i = 1 Do Until RS.EOF Flag = False Do Until Flag If RS!ID = i Then Flag = True Else Flag = False Debug.Print i i = i + 1 End If Loop RS.MoveNext i = i + 1 Loop Set RS = Nothing Set DB = Nothing End Sub
お礼
お返事送れてすみません。 ありがとうございます~実際にコードを書いていただいて、しかもテストまで。 感激です! で、せっかくなので実際やってみてからお返事したい!と思ってぺたぺた張ってみたりしたのですが、どうもうまくできなくて・・・ 何しろ初めてなので、何もわからなくって。 でももう少しがんばってみます。回答本当にありがとうございました。
- stork
- ベストアンサー率34% (97/285)
VBAで照合するよりクエリで照合する方が楽ですよ~。 そこで連番の作成が問題になってきますが、件数によって 1.エクセルのオートフィルを使って連番を作成してアクセスでインポートする。 2.オートナンバー型を持つテーブルを作成して行挿入の処理をループをまわす。(これだけなら簡単でしょう?) 初心者だったら、1の方法がわかりやすいですね。 数万件以上であれば2の法が簡単です。 あとは、不照合クエリを作成してください。
お礼
回答ありがとうございます! いろいろなやり方があるのですね~。1の方法なら私にもできそうです! 2の方は・・・すみません、初心者すぎてそれさえもわからず・・・とほほ。 がんばってみます!!
- DrSumire
- ベストアンサー率39% (264/666)
クエリーでもできるでしょうか? 面倒ですけど出来ますよ。 現実的ではないですが・・・ 伝票番号のフィールドだけを持つテーブルを作成して、検査したい開始番号から終了番号までのレコードを作成する。 クエリーで伝票TBとチェックTBを伝番でリンクしてプロパティをチェックTBの全てを表示する様に設定。 伝票TBの伝番以外の必須フィールドの条件をNullにする。 チェックTBの伝番を表示すれば、伝票TBに存在しない伝番だけ出てきます。 こんな面倒な事をするならVBAでチェックプログラムを書いたほうがスマートかと思いますが・・・・
お礼
具体的に書いていただいてありがとうございます~。ほんとにスミマセン。 ふー、実は私もそれを思いついてみましたが、おっしゃるとおり現実的ではないですよね・・・ VBAについに踏み入れるべきかしら・・・。 チェックプログラムは難しいでしょうか? 参考になりそうなURLなどあったら教えていただけないでしょうか・・・ 前に本屋さんでVBAの本も見てみましたが、初心者向けなのにいきなりハイレベルでチンプンカンプン でした。田舎に住んでいるもので、本も少ないのです(涙)。
- MarrowG
- ベストアンサー率53% (41/76)
データベースは入力されているデータを検索するのは簡単ですが、無いものを検索することは出来ません。 仮に連番で整理番号が振られているのなら、マクロなりVBAなりで番号を+1しながら順番にレコードが存在するかどうかを確認するしかないと思います。
お礼
早速の回答ありがとうございます。 やっぱりそうですか・・・ >マクロなりVBAなりで番号を+1しながら順番にレコードが存在するかどうかを確認するしかない すみません・・・マクロではどのように書くのでしょうか。 良かったら教えていただけませんか?難しいのでしょうか?
お礼
度々ありがとうございます!おかげさまで、なんとかできました!! 丁寧な回答、本当に感謝感謝です! これをきっかけにVBAにチャレンジしてみようと思います。