ACCESS 2つのテーブルを比較する方法

2つのテーブルを比較する方法

ACCESSで2つのテーブルに同じような値が入っている場合、その差分をチェックするシーンがあります。

この際、目視でのチェックは大変ですよね。

そこで、ACCESSのクエリの機能を使って、2つのテーブルを比較する方法をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSの基本的な使い方をご紹介していきます。

テーブルの差分の種類

2つのテーブルを比較する際、差分といっても以下の種類があります。

1.片方のテーブルにはあるが、もう一方のテーブルにはないレコードがある

2.両方のテーブルに共通するレコードがあるが、特定のフィールドの値が異なっている

このどちらの差分もACCESSでチェックが可能ですが、一つ重要なポイントがあります。
それは、2つのテーブルを比較する際のキーとなる値です。

主キーと言われますが、テーブル内では他のレコードと重複しない(ユニーク)な値でありつつ、2つのテーブルで共通の値である必要があります。

では、具体的な差分のチェック方法を見ていきましょう。

サンプルテーブル

今回は、以下のサンプルテーブルを準備しました。

TRN_売上サンプル

TRN_売上サンプル2

TRN_売上サンプル2

2つとも売上情報を入力するテーブルですが、よく見ると微妙に違いがあります。

今回はこの2つのテーブルの差分をチェックしていきます。

レコード単位での差分をチェックする

まずはレコード単位での差分をチェックしましょう。

ACCESSの不一致クエリを使用します。

メニューから「作成」→「クエリウィザード」を起動します。

クエリウィザード

クエリの種類を聞かれますので、不一致クエリウィザードを選択します。

不一致クエリウィザード

レコードを抽出するもととなるテーブルを選択します。

今回はTRN_売上サンプルテーブルを選択します。

次に比較に使用するテーブルを選択します。

今回はTRN_売上サンプル2です。

2つのテーブルに共通する値を選択します。

ここでは先ほど説明した主キーを選択します。

このフィールドを利用して、一致/不一致の判定が行われます。

今回は売上IDが主キーなので選択し、中央の矢印のボタンを押します。

下段の「関連付けるフィールド」に売上IDが記載されたのが分かります。

クエリの結果に表示するフィールドを聞かれますので、残りのフィールドをすべて選択して右側のボックスに移動します。

名前を付けて完了です。

クエリの結果を見ると、以下になります。

この方法で、TRN_売上サンプルにあって、TRN_売上サンプル2にないレコードのみを抽出することができます。

逆に、TRN_売上サンプル2にあってTRN_売上にないレコードを抽出したいときは、もう一つクエリを作り、テーブルを選択する順番を逆にして、先にTRN_売上サンプル2、次にTRN_売上サンプルを選択すれば作成できます。

フィールド単位での差分をチェックする

次に、両方のテーブルに共通するレコードで、フィールド(列)の値の差分をチェックする方法です。

先ほどと同じサンプルテーブルを使いますが、今回作成するクエリは不一致クエリではありません。

まずはクエリデザインからクエリを作成します。

クエリデザイン

テーブルの追加から「TRN_売上サンプル」と「TRN_売上サンプル2」を追加し、両方の共通の主キーである「売上ID」をドラッグアンドドロップでリレーション設定します。

2つのフィールドの間に線が引かれているのがリレーション設定された証です。

まずは顧客名を比較してみましょう。

下段のデザイングリッドにTRN_売上サンプルの顧客名とTRN_売上サンプル2の顧客名をドラッグします。

これだとどちらも「顧客名」フィールドでわかりにくいので、以下のように記載を変更します。

フィールド欄で「顧客名」の左にそれぞれ、顧客名1:、顧客名2:と記載しました。

クエリのフィールド行では、このように「:」を付けるとその左側はフィールド名として認識してくれます。

では、データシートビューで結果を見てみましょう。

このように、2つのテーブルで売上IDが共通するレコードの顧客名を並べて表示することができました。

これで差分をチェックすることができます。

ただ、全件目視でチェックするのはちょっと大変ですよね。そこでもう少し自動化してみましょう。

再度クエリのデザインビューに戻り、以下のフィールドを追加します。

判定: IIf([顧客名1]=[顧客名2],”〇”,”×”)

IIf関数を使って、顧客名1と顧客名2が同一の場合は〇、違う場合は×を表示するようにしました。

では、データシートビューで結果を見てみましょう。

このように、簡単に違いが分かるようになりました。

ちなみに、顧客名以外のフィールドも比べたい場合は下記のように横に比較するフィールドをつなげていけば複数のフィールドをチェックできます。

以上、2つのテーブルを比較する方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。