共通部分(交わり)
同じレイアウトの複数のテーブルの処理

AとBの共通部分(交わり)  ここでは、ユニークなキーを持つ、同じデザイン (ファイルレイアウト) の複数のファイルの共通部分を抽出する方法を取り上げます。

 例えば、A工場の取引先リストと、B工場の取引先リストから、共通な取引先だけのリストを作ろうとしている場合などです。

 このホームページでは、事前準備として、codeテーブルと同じデザインでレコードが異なる、codeOLD というテーブルを作ってみます。
1.先に作成した、code テーブルをコピーして、codeOLD というテーブルを作ります。
 テーブルオブジェクトで、code テーブルを選択して、「コピー」→「貼り付け」で、codeOLD というテーブル名で、テーブル構造とデータを指定して「OK」として、テーブルを作ります。
2.この codeOLD テーブルを開いて、「得意先」「大和マーケット」の行を削除しておきます。

注:  「結合」に使う共通の項目があれば、異なるレイアウトのテーブルでも、同じようにできます。


Accessの選択クエリの使い方

 クエリーのオブジェクトで、新規作成として、「デザインビュー」を表示します。
 対象とするテーブルを、「追加」します。(この事例の場合は、code と codeOLD です。)

 結合線をマウスの右クリックして表示されるメニューで、「結合プロパティ」を表示させて、「両方のテーブルの結合フィールドが同じ行だけを含める」とします。

SELECT code.*
FROM code INNER JOIN codeOLD
ON code.受注コード = codeOLD.受注コード;

 「受注コード 1018」の、「大和マーケット」の行が消えています。

注:  上の例では、集合でいう「共通部分」を抽出しています。

 ファイルレイアウトの違う複数のテーブルから、「結合」に使う共通の項目を使って、それぞれのファイルから項目(フィールド)を合体させたいときにも、同様にできます。
 複数のテーブルから、項目を組合せるた新しいテーブルを作る場合は、次のパターンも使います。
 「結合プロパティ」で、「2.左の全レコードと右の同じ結合フィールドのレコードだけを含める」とすると、 A

 「結合プロパティ」で、「3.右の全レコードと左の同じ結合フィールドのレコードだけを含める」とすると、 B

を選択することができます。


 参考:クエリ内でテーブルやクエリの間の結合の種類を変更する



 「共通部分」を抽出する場合は、SQLで、結合するキーを WHERE に等号で指定して、下記のように表現しても、同じ結果が得られます。

SELECT code.*
FROM code , codeOLD
WHERE code.受注コード = codeOLD.受注コード;

Excel では VLOOKUP を使って比較

 Excel では、LOOKUP関数の中の、VLOOKUP を使うのが普通でしょう。VLOOKUPを使うときの注意は、で前もって検索対象のデータを、@検索のキーを対象範囲の左端に持っていって、A順に並べておく必要が有ることです。

VLOOKUPの使い方:

 下の例の式

 =IF(ISNA(VLOOKUP(B2,codeOLD!$B$2:$B$296,1,FALSE)),"無し","有り")

 は、セル B2 の値を、シート codeOLD の 範囲 $B$2:$B$296 で検索して、1列目の値を持ってきます。もし、検索範囲に無い場合は、エラー値「#NA」になります。

 ISNA(対象) は、「対象」が、エラー値「#NA」のとき、「TRUE」になる、情報関数です。
 IF関数は、IF(論理式,[真の場合][,偽の場合]) となっています。

 これらを組合せた結果、合致した場合は、「有り」を、合致しない場合は、「無し」を表示してくれます。
 ここまで来れば、後は、フィルタで分類するだけです。

 レコード件数が多いと、上記の検索式だけでも、ファイル容量が大きくなり、Excel の操作も重くなります。


このページのトップに戻る↑ 次の項目を見る↓ Accessでお仕事 目次に戻る

ホームページのトップに戻る