すみません。検索してみたのですが見つからなくて・・・ぜひ教えてください。
使っているのは、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と関連する良く見られている質問

Q『EXCEL』アウトライン設定時に連番をふりたい。

EXCELで、部分的にアウトラインのグループ化を行い、その、目に見えている状態のみで
一気に連番をふりたいのですが、このままオートフィルで連番をつけようとすると
折りたたまれて見えていないところまで連番がふられてしまいます。
目に見えているところだけ連番にしたいのですが、どう操作すれば良いのでしょうか?
ご指導の程、よろしくお願いします。

Aベストアンサー

例えばA列にデータが入力されていて、
見えている行にはすべて何かしらかの
値(文字や数値)が入力されているならば、

例えば、D列に連番を振りたければ、
D1に
=SUBTOTAL(103,$A$1:A1)
と入力し、
以下オートフィルまたはコピー&ペーストしてください。

ただし、
折りたたみを解除すると連番が振り直されてしまいますので、
もし、連番を保持したいのであれば、もう一度折りたたみ、
D列を選択し、「コピー」
「編集」→「形式を選択して貼り付け」で「値」にして「OK」
にしてください。

もう一度、折りたたみを解除して確認すると、連番は保持されて
いますが、折りたたみの部分は一定値が保持されていると思います。

これで、OKであればそれでいいのですが、
もし、ここを空白にしたいのであれば、
アイデアがありますので、必要であればコメントください。

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の中で
締日順に並べ替わった結果が表示されます。
※表示順と並べ替えの順が違う時は表示順を変えるか
右のほうで並べ替えをしたいフィールドを表示しない
状態で出しそこで並べ替えをすれば大丈夫です。

QExcelの連番をふりなおす

Excelの表で、A列に連番をつけてあります。
行を挿入したり、削除したときに、連番がくずれないように
自動的にふりなおす方法があれば、教えていただけないでしょうか。
ヨロシクお願いします!!!

Aベストアンサー

例えばA3セルから下方向に1,2,3,4…と連番を入れるとします。
A3セルには
 =ROW()-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""")))

QExcelで飛ばし連番

Excelで連番をふりたいのですが、下記のようなことは可能でしょうか?

A列に曜日、B列に連番なのですが、
土曜日と日曜日は飛ばしたいのです。
連番が1000ほど続くので、何かいい方法はないかと考えています。
宜しくお願いいたします。

  A B
1 月  1
2  火  2
3 水  3
4  木  4
5 金  5
6 土
7 日
8  月  6
9 火  7
  ・  ・
  ・  ・
  ・  ・

Excel2002を使用しています。

Aベストアンサー

A列に日付があるとします。すなわちA列は日付シリアル値が入っているとします。文字列だと直接はダメですが。
C2に
=IF(OR(WEEKDAY(A2)=1,WEEKDAY(A2)=7),"",MAX($B$1:B1)+1)
と入れて月末まで式を複写する。
結果
2007/3/1 1
2007/3/2 2
2007/3/3
2007/3/4
2007/3/5 3
2007/3/6 4
2007/3/7 5
2007/3/8 6
2007/3/9 7
2007/3/10
2007/3/11
2007/3/12 8
以下略。
曜日の文字を使うならB列は、=TEXT(A2,"aaa")で文字列の「値」にしてください。表示形式ではダメ。

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","*","")

QExcel上でのデータ数字が連番であることを確認する方法を教えてくださ

Excel上でのデータ数字が連番であることを確認する方法を教えてください。

ある列に数字5桁で、00001,00002・・・と数字が約30000件並んでいますが、
これが重複や漏れなく正しく連番が付与されることを確認したいと考えています。

目視で1件ずつ見る以外に、関数等を使って検証する方法は無いでしょうか?
Excelは2003です。
どなたか良いアドバイスをお願いします。

Aベストアンサー

列内の1行ごとの差は「1」になるはずですね。
例えば a2-a1という式をすべてに投入すれば、条件を満たしていればすべての差が「1」です。
 あとはフィルターで「1」以外の答えが入っているかどうかを確認すればいいのではないでしょうか。

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
       ...続きを読む

Qexcelの関数かマクロで連番、日付を付けたい

こんばんわ、EXCELマクロ入門者です。
excelの関数かマクロ、VBAで日付や、連番を付けたいです。
できれば関数でできたらなぁと思います。マクロ、VBAはほとんど初めてです。
(1)まず、B2に商品名を入れます。
(2)すると、A2に連番、C2に今日の日付(システム日付)、
D2に商品名と今日の日付、商品ごとの連番が自動的に振っていく感じにしたいです。毎日たくさん入力するらしいのでマクロとかVBAとか関数で作ってくれと頼まれました。

A列は例えばA3に=if(B3="","",A2+1)を入れて何とかできたのですが、
C列の日付(today関数やnow関数ではファイルを開き直すと日付が変わってしまう)とD列の商品名-日付-商品ごとの連番で特に困っています。

イメージとしては下のような感じです。
  A   B    C     D
1 連番 商品名 日付    商品名-日付-商品ごとの連番
2 1   ○○○ 2007/8/10  ○○○-2007/8/10-1
3 2   ××× 2007/8/12  ×××-2007/8/12-1
4 3   △△△ 2007/8/13  △△△-2007/8/13-1
5 4   ○○○ 2007/8/15  ○○○-2007/8/15-2
6 5   ○○○ 2007/8/16  ○○○-2007/8/16-3

どなたか、ご教授ください。
どうぞ、宜しくお願い致します。

こんばんわ、EXCELマクロ入門者です。
excelの関数かマクロ、VBAで日付や、連番を付けたいです。
できれば関数でできたらなぁと思います。マクロ、VBAはほとんど初めてです。
(1)まず、B2に商品名を入れます。
(2)すると、A2に連番、C2に今日の日付(システム日付)、
D2に商品名と今日の日付、商品ごとの連番が自動的に振っていく感じにしたいです。毎日たくさん入力するらしいのでマクロとかVBAとか関数で作ってくれと頼まれました。

A列は例えばA3に=if(B3="","",A2+1)を入れて何とかできたのですが、
...続きを読む

Aベストアンサー

>C2に今日の日付(システム日付)
を入れるのであれば関数では実現できません。VBA(マクロ)が必要になります。
でもB列の日付、D列の商品・日付・連番までVBAで書き込むのはうまい方法とは言えません(理由は後述)。VBAでは日付だけ書き込んで、A列、D列は関数で表示させるのが良いと思います

B列の値が変更されたとき、C列に日付を書き込むマクロは以下です。このマクロはデータを入力するシートの「シート名右クリック」→「コードの表示」で開く画面に貼り付けてください

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("B2:B65536")) Is Nothing Then
  If Target.Cells(1, 1).Value = "" Then
   Target.Offset(, 1) = ""
  Else
   Target.Offset(, 1) = Date
  End If
 End If
End Sub

A2セルの関数式は
 =IF(B2="","",ROW()-1)
D2セルの関数式は
 =IF(B2="","",B2&"-"&TEXT(C2,"YYYY/MM/DD")&"-"&SUMPRODUCT((B$2:B2=B2)*(C$2:C2=C2)))
A2,D2ともに下方向にコピーしてください

補足
VBAでシートのSelection_Changeイベントを使って、「B列が変更されたらA列、D列にデータを書き込む」のは簡単にできます。
でも10行目までデータを入力した後、2行目に戻って商品名を直したらどうなりますか?

VBAで2行目の連番はふり直されますが、3行目~10行目の連番ふり直しは普通しません。(毎回全行のふり直しをするようVBAを書けば別ですが、普通そんな無駄な処理にはしないでしょう)
ですから特にD列のデータ書き込みはVBAではなく、シートの値によって自動的に更新される関数式の方がよいのです

>C2に今日の日付(システム日付)
を入れるのであれば関数では実現できません。VBA(マクロ)が必要になります。
でもB列の日付、D列の商品・日付・連番までVBAで書き込むのはうまい方法とは言えません(理由は後述)。VBAでは日付だけ書き込んで、A列、D列は関数で表示させるのが良いと思います

B列の値が変更されたとき、C列に日付を書き込むマクロは以下です。このマクロはデータを入力するシートの「シート名右クリック」→「コードの表示」で開く画面に貼り付けてください

Private Sub Worksheet_Cha...続きを読む

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を見た人がよく見るQ&A

人気Q&Aランキング