共通部分(交わり)
同じレイアウトの複数のテーブルの処理
ここでは、ユニークなキーを持つ、同じデザイン (ファイルレイアウト) の複数のファイルの共通部分を抽出する方法を取り上げます。
例えば、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.左の全レコードと右の同じ結合フィールドのレコードだけを含める」とすると、
「結合プロパティ」で、「3.右の全レコードと左の同じ結合フィールドのレコードだけを含める」とすると、
を選択することができます。
参考:
クエリ内でテーブルやクエリの間の結合の種類を変更する
var win = new Window(Application.getNewId(), {className: "spread", title: "初めてのAccess", top:500, left:100, width:800, height:560, resizable: true, url: "JoinTypesAndHowTheyAffectQueryResults_FS.htm", showEffectOptions: {duration:1}}) win.show();
「共通部分」を抽出する場合は、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でお仕事 目次に戻る