Access不一致クエリの作り方をお探しですね。
広告
Accessで「前回と今回の違い」を簡単に見つける!不一致クエリの使い方
Accessで「前回取り込んだデータと今回のデータ、何が違うんだろう?」「片方のテーブルにだけあるレコードってどれ?」と思ったこと、ありませんか? 目で見て確認したり、Excelに貼り付けて比べたりするのは、時間もかかるしミスも起きやすいですよね。
そんなときに便利なのが、**Accessの不一致クエリ**です。
2つのテーブルを比較して、「片方にはあるけど、もう片方にはない」というデータを、サッと抽出できるんです。
この記事では、初めての人でも分かるように、不一致クエリの作り方を準備から実際の使い方、注意点まで丁寧に解説していきます。
不一致クエリって何? 2つのテーブルを比べて分かること
Accessの**不一致クエリ**というのは、2つのテーブル(またはクエリ)を比べて、「一方にはあるけど、もう一方にはないレコード」を見つけ出すためのクエリです。
例えばこんな場面で使えます:
– 「今月の顧客リストにはあるけど、先月のリストにはない新しいお客さん」
– 「商品マスターには登録されてるのに、受注明細には一度も出てこない商品」
– 「旧システムから移行したデータの中で、新システムにまだ入っていないレコード」
データがたくさんあるAccessで、目で見て違いを探すのはほぼ無理ですよね。
不一致クエリを使えば、比較作業が短時間で、しかも正確にできるようになります。
不一致クエリで一番大事なのは、**「何を基準に同じレコードと判断するか」**です。
Accessは人間みたいに「名前が似てるから同じ人かな?」なんて推測してくれません。
指定したフィールドの値がピッタリ一致するかどうかで判断します。
だから、顧客ID、商品ID、売上ID、社員番号みたいに、**各レコードを一意に識別できるフィールド**を比較のキーとして用意する必要があります。
このキーが重複していたり、片方のテーブルだけ形式が違っていたりすると、正しい差分が出てきません。
クエリを作る前に、比較するテーブルの構造とキー項目をチェックしておくのが成功のコツです。
あと、不一致クエリが見つけられるのは、基本的に**「レコードがあるかないか」の違い**です。
つまり、「Aテーブルには売上ID『1001』があるのに、Bテーブルにはない」という違いを見つけるのが得意なんです。
逆に、AテーブルにもBテーブルにも売上ID「1001」は存在するけど、金額や住所などの中身だけが違う場合は、不一致クエリだけでは不十分です。
こういう「同じレコード内の項目の違い」は、選択クエリやIIf関数を組み合わせて確認します。
差分にもいろんな種類があるので、まずは「レコード自体がないのか」「値が違うだけなのか」を分けて考えるのが大切です。
不一致クエリの作り方:ウィザードで簡単に差分を見つける手順
Access不一致クエリの作り方は、初めての人なら**クエリウィザード**を使うのが一番簡単です。
比較する2つのテーブルを事前に用意して、両方に共通する比較キーがあることを確認してから始めましょう。
例えば、「T_売上_今回」と「T_売上_前回」という2つのテーブルがあって、どちらにも「売上ID」が入っているとします。
この場合、「今回の売上データにはあるけど、前回の売上データにはないレコード」を抽出すれば、新しく追加された売上を確認できますよね。
作業前には、フィールド名やデータ型が大きくズレていないかもチェックしておくと安心です。
基本の操作手順
1. **Accessのリボンから「作成」タブを開き、「クエリウィザード」を選択**します
2. 表示されたダイアログで**「不一致クエリウィザード」**を選びます
3. 最初に、**差分として表示したいレコードが含まれるテーブル**を指定します
4. 次に、**比較相手となるテーブル**を選びます
ここで選ぶ順番がすごく重要です! 最初に選んだテーブルを基準にして、「そのテーブルにはあるけど、次に選んだテーブルにはないレコード」が結果として出てくるからです。
「AにあってBにないもの」を出したいのか、「BにあってAにないもの」を出したいのか、はっきりさせてから進みましょう。
関連付けと表示項目の設定
次の画面では、**2つのテーブルを関連付けるフィールド**を指定します。
売上データなら売上ID、顧客データなら顧客ID、商品データなら商品コードなど、同じ意味を持つフィールドを左右から選んで関連付けます。
このフィールドが不一致判定の基準になります。
その次の画面では、**クエリ結果に表示したいフィールド**を選択します。
差分レコードを確認するだけならIDや名称だけでもいいですが、後から内容を確認したり、追加クエリやExcel出力に使ったりする場合は、必要な項目をまとめて表示しておくと便利です。
最後にクエリ名を付けて完了すると、条件に合う差分レコードだけが一覧で表示されます。
逆方向の差分も確認しよう
逆方向の差分も確認したい場合は、同じ手順でもう一つ不一致クエリを作って、最初に選ぶテーブルと比較先テーブルを入れ替えます。
例えば、「今回にあって前回にないデータ」と「前回にあって今回にないデータ」は、似ているようで意味が全然違います。
前者は新規追加、後者は削除されたか抜けている可能性を示します。
データ移行や月次更新の確認では、片方向だけじゃなく**両方向の差分を確認する**ことで、取り込み漏れや削除漏れに気づきやすくなります。
業務で使う場合は、クエリ名にも「今回のみ」「前回のみ」みたいに方向が分かる名前を付けておくと、後で混乱しません。
うまく抽出できないときの原因とチェックポイント
不一致クエリを作っても、思ったような結果が出ないことがあります。
よくある原因と対処法を見ていきましょう。
比較キーの選び方が適切でない
代表的な原因は、**比較キーの選び方**が適切でないことです。
例えば氏名だけで比較すると、同姓同名の人を同じレコードとして扱ってしまう可能性があります。
逆に、同じ顧客でも表記ゆれがある項目をキーにすると、本来一致すべきデータが不一致として出てきてしまいます。
比較キーには、できる限り**重複しない管理番号やID**を使いましょう。
そして、こんな点もチェックしてください:
– 文字列の前後に余分なスペースが入っていないか
– 数値と文字列が混在していないか
– データ型が一致しているか
特にCSVやExcelからインポートしたデータでは、見た目は同じでもデータ型が違うケースがあるので注意が必要です。
Null(空欄)の扱いに注意
もう一つ注意したいのが、**Null(ヌル)の扱い**です。
Accessでは未入力の値をNullと呼んで、空文字(“”)や0とは別のものとして扱います。
不一致クエリは内部的に、外部結合と「Is Null」という条件を使って差分を抽出します。
そのため、比較先に該当レコードが存在しない場合、そのテーブル側の値がNullになって、それを条件として拾い上げます。
仕組みとしては合理的なんですが、比較キーそのものにNullが含まれていたり、事前に除外すべき空欄データが混ざっていたりすると、思わぬレコードが差分として表示されることがあります。
必要に応じて、先に選択クエリで**「Is Not Null」を指定**して、比較対象を整理してから不一致クエリを作ると精度が上がります。
データ型や表記の違い
**データ型や表記の違い**も、差分抽出でよくある落とし穴です。
例えば:
– 片方のテーブルでは商品コードが「001」(文字列)、もう片方では「1」(数値)
– 全角と半角の違い(「ABC」と「ABC」)
– ハイフンの有無(「123-4567」と「1234567」)
– 前後のスペース
– 日付の時刻部分の有無
業務上は同じ商品を指していても、Access上は一致しない場合があります。
差分抽出の前には、Format関数、Trim関数、Replace関数などで**表記をそろえる**ことも検討しましょう。
特に外部システムから取り込んだデータとAccess内のマスターを比較する場合は、クエリ作成そのものよりも、**比較できる状態にデータを整える工程**が重要になります。
デザインビューで中身を確認
ウィザードで作成した不一致クエリは、**デザインビュー**で中身を確認できます。
2つのテーブルが線で結ばれていて、片方のテーブルをすべて表示する外部結合になっていること、比較先テーブル側のキー項目に「Is Null」の抽出条件が入っていることを見れば、どんな仕組みで差分が抽出されているか理解しやすくなります。
複数フィールドを組み合わせて比較したい場合は、デザインビューで結合フィールドを追加する方法もあります。
ただし、複数条件にすると一致判定が厳しくなるので、「IDが同じなら同一レコードと見る」のか、「IDと日付と金額まで同じなら同一と見る」のか、**業務上の定義を先に決めておく**必要があります。
フィールド値の差分確認と抽出後の活用方法
不一致クエリは「片方にしかないレコード」を探すのに便利ですが、実務では**「両方のテーブルに同じIDはあるけど、住所や単価、数量、ステータスなどの値が変わっているか」**を調べたい場面も多いですよね。
値の違いを確認する選択クエリ
この場合は、不一致クエリではなく**選択クエリ**を使います。
手順はこうです:
1. クエリデザインで2つのテーブルを追加
2. 共通する主キーを結合
3. 比較したいフィールドを左右に並べる
4. 必要に応じて別名を付ける(例:「今回金額: [T_売上_今回]![金額]」「前回金額: [T_売上_前回]![金額]」)
これで、同じIDのレコードを横並びで確認できるようになります。
IIf関数で判定列を作る
さらに見やすくするには、**IIf関数で判定列を作る**方法が便利です。
例えば金額を比較するなら:
“`
判定: IIf([T_売上_今回]![金額]=[T_売上_前回]![金額],”一致”,”不一致”)
“`
こんな式を追加します。
住所や顧客名など複数項目を比較したい場合も、項目ごとに判定列を作れば、どこが変わったのか一目瞭然です。
ただし、Null同士の比較では意図した結果にならない場合があるので、必要に応じて**Nz関数でNullを置き換えて**比較します:
– 文字列なら:Nz([項目],””)
– 数値なら:Nz([項目],0)
未入力データが混ざる場合でも、判定が安定します。
差分レコードを業務処理に活用
抽出した差分レコードは、確認するだけじゃなく、**業務処理に活用**できます。
例えば、新しく追加されたデータを別テーブルに取り込む場合は、不一致クエリの結果を元に**追加クエリ**を作成できます。
追加クエリを使えば、Aテーブルにだけ存在するレコードをBテーブルへまとめて追加できます。
ただし、追加クエリは実行すると**データが実際に変更されて、基本的に元に戻せません**。
実行前には必ず:
– バックアップを取る
– 主キーの重複をチェック
– オートナンバー型フィールドの扱いを確認
– 追加先テーブルの必須項目を確認
特にオートナンバー型のIDには、通常は追加クエリ側から値を指定せず、**Accessに自動採番させる**のが安全です。
まとめ:不一致クエリで差分確認を効率化しよう
Access不一致クエリの作り方を覚えると、こんな業務で差分確認を効率化できます:
– データ移行
– 月次更新
– 顧客リストの突合
– 商品マスターの整理
**ポイントのおさらい**:
– 比較キーを正しく選ぶこと
– テーブルの選択順で抽出方向が変わること
– レコードの有無とフィールド値の違いを分けて考えること
最初はウィザードで作成して、慣れてきたらデザインビューで結合や抽出条件を確認すると、トラブルにも対応しやすくなります。
Accessのクエリは**一度作って保存しておけば繰り返し使える**ので、定期的な差分チェックを仕組み化したい場合にもすごく便利です。
ぜひ試してみてくださいね!
広告
