• ベストアンサー

エクセル データの比較・抽出方法について

列1と列2を比べて、データが一致しないものを抽出したいのですが、方法がわかりません。どなたかご存知のかた教えていただけないでしょうか? 列1     列2 りんご   りんご みかん   メロン もも    もも いちご   バナナ 列2にあって 列1にないもの (→この場合メロン・バナナ) 列1にあって 列2にないもの (→この場合みかん・いちご) をそれぞれ分かるようにしたいのです。 エクセルの関数を使ってできたらよいなと思うのですが どなたか知恵を貸していただけないでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jindon
  • ベストアンサー率43% (50/116)
回答No.5

データ量が多い場合はお奨めしませんが、 配列式です A列に有って、B列に無いものをC列に詰めて表示 =IF(COUNTIF($B$1:$B$100,$A$1:$A$100)=0,INDIRECT("a"&SMALL(IF(ISERROR(MATCH($A$1:$A$100,$B$1:$B$100,0)),ROW($1:$100)),ROW(A1)))) B列に有って、A列に無いものをD列に詰めて表示 =IF(COUNTIF($B$1:$B$100,$A$1:$A$100)=0,INDIRECT("b"&SMALL(IF(ISERROR(MATCH($B$1:$B$100,$A$1:$A$100,0)),ROW($1:$100)),ROW(A1)))) いずれの式も配列式なので Ctrl + Shift + Enter で確定する必要があます。 データは100行までの想定で、データ範囲を拡大する場合は、式中全ての 100 を等しく拡大しなければなりません。

その他の回答 (5)

  • jindon
  • ベストアンサー率43% (50/116)
回答No.6

jindonです 配列式の修正です 両方の式ともに If(...., が必要ありませんので C1: =INDIRECT("a"&SMALL(IF(ISERROR(MATCH($A$1:$A$100,$B$1:$B$100,0)),ROW($1:$100)),ROW(A1))) D1; =INDIRECT("b"&SMALL(IF(ISERROR(MATCH($B$1:$B$100,$A$1:$A$100,0)),ROW($1:$100)),ROW(A1))) 両方とも 0 が出るまで下方コピー+ペーストです

sumire79
質問者

お礼

お礼が遅くなり大変失礼しました。 どうもありがとうございました。

  • subri
  • ベストアンサー率28% (16/56)
回答No.4

あ、ちょっと条件付き書式の数式が違いました。 =COUNTIF($B$1:$B$10,A1)=0 と =COUNTIF($A$1:$A$10,B1)=0 ですね。 でもこれですと両方の列に空白があるとそれも塗りつぶされますから一工夫必要ですね。

sumire79
質問者

お礼

お礼が遅くなりまして、大変失礼しました。 ありがとうございます。 参考になりました。

  • subri
  • ベストアンサー率28% (16/56)
回答No.3

A列にあってB列にないものをE列に上から詰めて表示。 B列にあってA列にないものをF列に上から詰めて表示。 この条件でしたら、C、D列を作業列にしてはどうでしょうか。 あとで達人の方に作業列を使わない方法で関数式をまとめてもらうのを待っています。 C1 =IF(OR(A1="",COUNTIF(B:B,A1)>0),"",ROW()) D1 =IF(OR(B1="",COUNTIF(A:A,B1)>0),"",ROW()) E1 =IF(COUNT(C:C)<ROW(),"",INDEX(A:A,SMALL(C:C,ROW()))) F1 =IF(COUNT(D:D)<ROW(),"",INDEX(B:B,SMALL(D:D,ROW()))) これを下までコピーします。 (ただし見出しなどはないと想定して、です。) それか、ただ目立たせるだけならば条件付き書式の中で関数を使ってみてはどうでしょうか? A列を選択して 条件付き書式の数式に=COUNTIF(B:B,A1)で書式を決める。 B列を選択して 条件付き書式の数式に=COUNTIF(A:A,B1) 上の両方とも、もし1行目に見出しがあれば範囲を列ごとではなくて $A$2:$A$10のように指定してください。 先のお二方のやり方でオートフィルタを組み合わせて絞り込みもできますね。

  • jindon
  • ベストアンサー率43% (50/116)
回答No.2

A,B列それぞれにデータが有り C列に A列にあって、B 列に無いもの =if(countif(B;B,A1)>0,"",A1) として、A列のデータの有る行までコピー+ペースト D列に B列にあって、Aれつにないもの =if(countif(A:A,B1)>0,"",B1) として、B列のデータの有る行までコピー+ペースト

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

COUNTIF関数を使ってみては? > 列2にあって 列1にないもの =COUNTIF(列1, "りんご") で列2の1項目目の「りんご」の数を列1から数えます。 数えた結果が0ならば列1には無いということになります。

sumire79
質問者

お礼

お礼が遅くなりまして、大変失礼しました。 回答ありがとうございます。 参考になりました。

関連するQ&A