すみません。検索してみたのですが見つからなくて・・・ぜひ教えてください。
使っているのは、ACCESS97です。
ある伝票の整理番号が連番になっています。データは入力されています。
抜けている整理番号を調べたいのですが、どういった方法があるでしょうか?
クエリーでもできるでしょうか?
困ってしまってますので、なにとぞよろしくお願いします!

このQ&Aに関連する最新のQ&A

A 回答 (5件)

こんにちは。



>で、せっかくなので実際やってみてからお返事したい!と思ってぺたぺた張ってみたりしたのですが、
>どうもうまくできなくて・・・
>何しろ初めてなので、何もわからなくって。

ごめんなさい。よく質問を読んでいませんでしたのでとんちんかんなレスをしたかもしれません。
どんなエラーが出るかによりますが、

「パラメータが少なすぎます。? を指定してください。」
と出た場合は「ID」と書いている全ての文字を「整理番号」に変更してみてください。
>StSQL = "select 整理番号 from テーブル1 order by 整理番号"
>If RS!整理番号 = i Then
上記3カ所

「入力テーブルまたはクエリ '???' が見つかりませんでした。そのテーブルやクエリが存在していること、
または名前が正しいことを確認してください。」
と出た場合は、テーブル名が違っていますので以下の「テーブル1」の部分を修正してください。
>StSQL = "select 整理番号 from テーブル1 order by 整理番号"

それ以外のエラーが出る場合は補足に書いてください。

あと、この方法では、大量に抜けているデータが存在する場合は、取得したデータをテーブルに書き込むなどの工夫が必要です。

#3のstorkさんが回答した方法等で解決しているのであれば、こんなやり方もあるんだ、くらいに思ってください。
    • good
    • 0
この回答へのお礼

度々ありがとうございます!おかげさまで、なんとかできました!!
丁寧な回答、本当に感謝感謝です!
これをきっかけにVBAにチャレンジしてみようと思います。

お礼日時:2001/12/22 09:21

こんにちは。


以下のコードで実現できます。
テーブル名が「テーブル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
    • good
    • 0
この回答へのお礼

お返事送れてすみません。
ありがとうございます~実際にコードを書いていただいて、しかもテストまで。
感激です!
で、せっかくなので実際やってみてからお返事したい!と思ってぺたぺた張ってみたりしたのですが、どうもうまくできなくて・・・
何しろ初めてなので、何もわからなくって。
でももう少しがんばってみます。回答本当にありがとうございました。

お礼日時:2001/12/16 00:37

VBAで照合するよりクエリで照合する方が楽ですよ~。



そこで連番の作成が問題になってきますが、件数によって
1.エクセルのオートフィルを使って連番を作成してアクセスでインポートする。
2.オートナンバー型を持つテーブルを作成して行挿入の処理をループをまわす。(これだけなら簡単でしょう?)

初心者だったら、1の方法がわかりやすいですね。
数万件以上であれば2の法が簡単です。

あとは、不照合クエリを作成してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
いろいろなやり方があるのですね~。1の方法なら私にもできそうです!
2の方は・・・すみません、初心者すぎてそれさえもわからず・・・とほほ。
がんばってみます!!

お礼日時:2001/12/12 17:05

クエリーでもできるでしょうか?


面倒ですけど出来ますよ。
現実的ではないですが・・・
伝票番号のフィールドだけを持つテーブルを作成して、検査したい開始番号から終了番号までのレコードを作成する。

クエリーで伝票TBとチェックTBを伝番でリンクしてプロパティをチェックTBの全てを表示する様に設定。
伝票TBの伝番以外の必須フィールドの条件をNullにする。
チェックTBの伝番を表示すれば、伝票TBに存在しない伝番だけ出てきます。

こんな面倒な事をするならVBAでチェックプログラムを書いたほうがスマートかと思いますが・・・・
    • good
    • 0
この回答へのお礼

具体的に書いていただいてありがとうございます~。ほんとにスミマセン。
ふー、実は私もそれを思いついてみましたが、おっしゃるとおり現実的ではないですよね・・・
VBAについに踏み入れるべきかしら・・・。
チェックプログラムは難しいでしょうか?
参考になりそうなURLなどあったら教えていただけないでしょうか・・・
前に本屋さんでVBAの本も見てみましたが、初心者向けなのにいきなりハイレベルでチンプンカンプン
でした。田舎に住んでいるもので、本も少ないのです(涙)。

お礼日時:2001/12/11 13:29

データベースは入力されているデータを検索するのは簡単ですが、無いものを検索することは出来ません。


仮に連番で整理番号が振られているのなら、マクロなりVBAなりで番号を+1しながら順番にレコードが存在するかどうかを確認するしかないと思います。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
やっぱりそうですか・・・
>マクロなりVBAなりで番号を+1しながら順番にレコードが存在するかどうかを確認するしかない
すみません・・・マクロではどのように書くのでしょうか。
良かったら教えていただけませんか?難しいのでしょうか?

お礼日時:2001/12/11 13:17

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESS97のクエリーでデーターの並び替え

お世話になります。
MS-ACCESS97のテーブル作成クエリーにて、データーの並び替えを試みているのですが、うまくいきません。

項目は下記のように並んでいます。

-----------------------------
コード1 | コード2 | 締日 | 請求額 |
------+------+------+--------|
105000 | 1000 |20030420| 50000 |
103000 | 0 |20030520| 30000 |
105000 | 1050 |20030420| 70000 |
103000 | 0 |20030420| 10000 |
105000 | 1000 |20030520| 20000 |


上記を下記のように、コード1の降順で、コード2の降順で、締日の降順に並び替えたいのですが、並び替えは列に対してひとつ?のみでしょうか?

-----------------------------
コード1 | コード2 | 締日 | 請求額 |
------+------+------+--------|
103000 | 0 |20030420 | 10000 |
103000 | 0 |20030520 | 30000 |
105000 | 1000 |20030420| 50000 |
105000 | 1000 |20030520| 20000 |
105000 | 1050 |20030420| 70000 |

お願いします。

お世話になります。
MS-ACCESS97のテーブル作成クエリーにて、データーの並び替えを試みているのですが、うまくいきません。

項目は下記のように並んでいます。

-----------------------------
コード1 | コード2 | 締日 | 請求額 |
------+------+------+--------|
105000 | 1000 |20030420| 50000 |
103000 | 0 |20030520| 30000 |
105000 | 1050 |20030420| 70000 |
103000 | 0 |20030420| 10000 |
105000 | 1000 |20030520| 20000 |


上記を下記のように、コード1の...続きを読む

Aベストアンサー

クエリーのデザインで並べ替えを
コード1・・・降順
コード2・・・降順
締日・・・・・降順
にすれば出きるとおもいます
コード1順で並べ替えをし同じコード1の中で
コード2順に並べ替えをし、同じコード2の中で
締日順に並べ替わった結果が表示されます。
※表示順と並べ替えの順が違う時は表示順を変えるか
右のほうで並べ替えをしたいフィールドを表示しない
状態で出しそこで並べ替えをすれば大丈夫です。

Qアクセス97のクエリーで、年月データの置換処理を行いたいのですが、やり方が分かりません。

マイクロソフトAccess97を使って、テーブル上の「年月」のデータのうち、ある条件に該当するものについてクエリーで「1ヶ月前」あるいは「2ヶ月前」の年月にまとめて置換えようとしています。(例:200705→「200704」あるいは「200703」へ置換え)

クエリのフィールド欄に、
実年月:[○○テーブル名]![年月]-1 あるいは
実年月:[○○テーブル名]![年月]-2
と入力すると、月によっては求めたい結果が出ます。
ただ、年をまたがるような場合にはうまくいきません。
どんなケースでも(例えば、もとの年月が2007年1月の場合に、1ヶ月前→「200612」、2ヶ月前→「200611」と変換される)きちんと処理がされるようにするためには、どうしたらよいか教えて頂けないでしょうか。

Aベストアンサー

>200705
これはAccessにとってはただの数字または文字列で年月とは見てくれませんん
これを日付と分かる形に変形してやらないと日付関連の関数は使えません

実年月: DateAdd("m",-1,DateValue(Format([数字],"0000\/00""/1""")))

Qアクセス97のクエリーでIF関数を使って特定のコードがある場合に*を表示させたいのですが、うまくいきません。

会社でマイクロソフトAccess97を使って作業しています。
初心者で分からないことだらけでして、基本的なことだと思うのですがこちらで質問させていただきます。
給与年月・社員番号・名前・給与コード・給与額のフィールドを持ったテーブルがあります。
従業員一人につき、同年月の給与で複数行の給与項目・金額を持っている形です。(以下イメージ)

給与年月 社員番号 名前 給与コード 給与額
200709   001    花子  A01    200000
200709   001    花子  C02    20000
200709   001    花子  M05    10000
200709   002    太郎  A01    230000
200709   002    太郎  B04     35000
200709   002    太郎   L02     5000
               
このテーブルを使ったクエリーで、給与コードがA番台~L番台のものだけを抽出させようとして、
それは式を入れてうまくいったのですが(以下例の通り、結果M05の行は表示されなくなった)、
それと同時に特定の給与コード(例えばL01とL02)があった場合にはその行に「*」を表示、
それら以外なら何も表示しないというフィールドを追加したいのですが、うまくいきません。
クエリーデザイン画面で「要確認」のフィールドを追加、フィールド名欄に、
要確認:IIF([給与コード]=”L01” or “L02”,”*”,””)
という式を入れたのですが、結果全ての行に「*」が表示されてしまいます。(以下例)
目指したいのは、この例で言うと、最終行太郎のL02の行のみに「*」を表示させることなのですが。。。

給与年月 社員番号 名前 給与コード 給与額 要確認
200709   001    花子  A01    200000    *
200709   001    花子  C02    20000    *
200709   002    太郎  A01    230000    *
200709   002    太郎  B04     35000     *
200709   002    太郎   L02     5000     *

何を変えたら、目指す結果を得られるでしょうか?

会社でマイクロソフトAccess97を使って作業しています。
初心者で分からないことだらけでして、基本的なことだと思うのですがこちらで質問させていただきます。
給与年月・社員番号・名前・給与コード・給与額のフィールドを持ったテーブルがあります。
従業員一人につき、同年月の給与で複数行の給与項目・金額を持っている形です。(以下イメージ)

給与年月 社員番号 名前 給与コード 給与額
200709   001    花子  A01    200000
200709   001    花子  C02    20000
...続きを読む

Aベストアンサー

式が間違っています

要確認: IIf([給与コード]="L01" Or [給与コード]="L02","*","")

Q削除クエリー”更新可能なクエリーでなければなりせん”のエラー

アクセス97(W2000)
削除クエリーを実行すると、上記のようなエラーメッセージが出てきます。
行ったのは、下記のような内容です。

テーブルA:品種・商品コード
テーブルB:購入月・商品コード・単価

この2つのデーブルを、商品コードで結合します。
そして、選択クエリーで、
”購入月・品種・商品コード・単価” を表示させます。
その後、品種で”R”を設定し、抽出します。

ここまでは、抽出も出来、後は、テーブルBから”品種R”だけ、
つまり、選択した内容を削除したく、選択クエリーを削除クエリーに変更し、
実行したところ、上記のエラーが発生いたしました。

削除するテーブルを指定する、サブクエリーを使用する、
など、このままではいけない、というのはわかったのですが、
具体的な方法が、よくわかりません。

今の自分の実力では、かなりの勉強不足、と思いますが、
なにがしかのアドバイスを頂ければと、思っております。
お手数ですが、どなたか、よろしくお願い申し上げます。

Aベストアンサー

テーブルの構造からして、テーブルAには同じ商品コードを持つレコードは1件のみで
テーブルBは同じ商品コードをもつレコードが複数件存在すると思われます

この2つのテーブルを商品コードで結合すると
テーブルAとテーブルBのレコードが 1:多 の形で
繋がることになります。

 テーブルA        テーブルB
品種 商品コード   購入月 商品コード 単価
R   ABC       10    ABC    100
              11    ABC    150
         ↓
購入月 品種 商品コード 単価
10    R    ABC    100
11    R    ABC    150

※テーブルBの複数件のレコードに対して、テーブルAは
 同じ1件のレコードの内容が同時に使われている

こうした 1:多 の形のクエリは「更新不可能なクエリ」になります。
(上記の例で、11月のレコードだけ消そうとしても
テーブルAのデータは10月のレコードの方にも使われているため消す事はできない
といった不整合が発生するため、更新不可とみなされる)

サブクエリを使った形にするためには
テーブルの結合は行わず、テーブルBのみを指定した削除クエリとし
商品コードの抽出条件の部分に

IN(SELECT 商品コード FROM テーブルA WHERE 品種 = "R")

という式を埋め込んでみてください。

これならば
「テーブルAから 品種 = R の商品コードを抽出し
 テーブルBの商品コードがそれと一致するレコードを削除する」
という意味のクエリになります。

SQLビューで書くならば

DELETE FROM テーブルB
WHERE 商品コード IN(SELECT 商品コード FROM テーブルA WHERE 品種 = "R")

という形になります。

テーブルの構造からして、テーブルAには同じ商品コードを持つレコードは1件のみで
テーブルBは同じ商品コードをもつレコードが複数件存在すると思われます

この2つのテーブルを商品コードで結合すると
テーブルAとテーブルBのレコードが 1:多 の形で
繋がることになります。

 テーブルA        テーブルB
品種 商品コード   購入月 商品コード 単価
R   ABC       10    ABC    100
              11    ABC    150
       ...続きを読む

QAccess2000のクエリーで行番号を値として取得する方法

たとえば、売上伝票テーブルから「伝票番号」ごとに1から順に値を付けたいのですが。
たとえば・・・
 「伝票番号」 「区分番号」
   A-0519     1
   A-0520     2
   A-0521     3
    ・      ・
このように「区分番号」を新たに用にしたいのですが、お教えください。
ちなみに「伝票番号」は同じデータが最大4件ありますが、「伝票番号」が同じであれば「区分番号」も同じにしたいのです。
つまり・・・
 「伝票番号」 「区分番号」
   A-0519     1
   A-0519     1
   A-0520     2
    ・      ・
という感じです。
よろしくお願いいたします。

Aベストアンサー

i-haradaです。

売上伝票テーブルの伝票番号のフィールドを基に「Q_売上伝票」を作成します。

次に、T_売上伝票番号テーブルを作成し「売上伝票番号」の他に区分番号(オートナンバー)を作成します。

その次に売「Q_売上伝票」をグループ化し追加クエリーに変更します。
追加先は「T_売上伝票番号」テーブルの「売上伝票番号」のフィールド。

そうしてから、リレーションを「売上伝票番号」と「伝票番号」に張る。
T_売上伝票番号テーブルの区分番号(オートナンバー)が区分番号になると思いますが。
こんなんじゃ駄目かな?


人気Q&Aランキング

おすすめ情報