• ベストアンサー

Excelで2列にまたがるデータを比較したい

こんばんは。 A列とB列の比較に困っています(>_<) 例えば、  ======A===========|=========B==========|=======C======== 2 セパタクロー==========ペタンク==============  3 ペタンク==============カモギー==============    4 クリケット============ブズカシ==============    5 ブズカシ==============ホルヌッセン==========ホルヌッセン 6 コクボル==============ヤールギレッシュ======ヤールギレッシュ 7 ハーリング============クロッケー============クロッケー 8 カモギー==============タスポニー============タスポニー ・            ・             と、データが並んでおりまして、この中から「B列にはあるがA列にはないデータ」を、C列に抽出したいのです。 この場合「ホルヌッセン」「ヤールギレッシュ」「クロッケー」「タスポニー」が、B列にはあるがA列にはないデータなので、関数などを使ってC列にそのデータをそのまま抽出したいのですが、どの関数を使えばいいのか頭を悩ませています・・・。 B2「ペタンク」という文字列を、A列全てを検索範囲として検索し、もしA列に「ペタンク」という文字列があれば、C2には“空白”を返します。 もし、A列全てから検索しても「ペタンク」という文字列がなかった場合、C2にはそのまま「ペタンク」を返します。 それによって最終的に、「A列にはないがB列にはあるデータ」を、C列に抽出したいのです。 皆様のお力をお借しいただきたい次第です(>_<) よろしくお願いします<m(__)m>

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.5

NO4です。 数式に誤りがありましたので訂正します。 C2に=IF(COUNTIF(A:A,B2),"",B2)として下方向にコピー

dj-s
質問者

お礼

すごいです、簡単に値が出てきました! 本当にありがとうございます(>_<)

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

#3です。 お礼の疑問について まず式は間違いないと思います。注意点は検索表の番地を、式複写で動かないよう、固定するため$をつける。これも問題ないようです。ほかの問題点として、質問者の例でやるとき、 (1)データのあり場所の列が、違う。 (2)質問では実データは第2行目から入れる例で酢g、見出し行、表として、余裕の空白行が有ると MAX($D$1:D1)+1 の$D$1:D1の部分が変わる。後のD1は$をつけないこと。 === 実際の列や実データのスタート行をもう一度チェックして見てください。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

一例です。 C2に=IF(COUNTIF(A:A,B1),"",B2)として下方向にコピー

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

考え方は簡単。しかし質問の表現振りから見るレベルでは難しい。 A列の値を元にB列の中に該当があるか調べるーー>VLOOKUP関数 A.ありーー>値が返る B.なしーー>ISROORで判定して、TRUEが返る ーー 次に難しいのは、C列に「抜き出す」こと。 常常言っているが、エクセル関数では、抜き出しはストレートには難しい。Googleで「imogasi方式」で照会すれば、過去のこのコーナーの抜き出し問題の回答例が多数出てくる。それらを勉強のこと。 imogasi方式は、該当のものに上から連番を降って、その連番に当たる行にデータを引っ張ってくる理屈で、作業列を1列使う。 使わない式は上記に載っているが、並みのエクセル関数の熟練レベルでは理解できない。 == 例データ(ごたごた書かなくても、こんな簡単な例で判るのだ。) A2:D6 A列  B列    C列   D列 a b FALSE b x FALSE c d TRUE 1 d f FALSE e a TRUE 2 C列は参考で C2の式は =ISERROR(VLOOKUP(A2,$B$2:$B$10,1,FALSE)) TRUEの行が見つからないもの。 D列に連番を振っている D2 の式は =IF(ISERROR(VLOOKUP(A2,$B$2:$B$10,1,FALSE)),MAX($D$1:D1)+1,"") ーー これでD列の1,2、・・を元にF列の害1行目にC、第2行目にeを持ってくる F2の式は =INDEX($A$1:$A$10,MATCH(ROW()-1,$D$1:$D$10,0),1) 下方向に式を複写 結果 c e #N/A #N/Aが出ないようにするのは「imogasi方式」のWEBに有る。略。

dj-s
質問者

お礼

imogasi方式でやってみました! まず最初に、imogasiさんが提示してくださったモデルと式をそのまま貼り付け、 c e #N/A の結果を出しました。imogasiさんが提示してくださったこのモデルに依れば「A列にはあるがB列にはないデータ」を抽出することができるようですね。 その後、A列(a,b,c,d,e)、B列(b,x,d,f,a)の代わりに、私自身の目的のデータをそれぞれ貼り付けてみました。 データの個数が、私の場合はA列、B列それぞれ500ほどありましたので、 =ISERROR(VLOOKUP(A2,$B$2:$B$500,1,FALSE)) =IF(ISERROR(VLOOKUP(A2,$B$2:$B$500,1,FALSE)),MAX($D$1:D1)+1,"") =INDEX($A$1:$A$500,MATCH(ROW()-1,$D$1:$D$10,0),1) と、範囲の箇所を「500」に変更させ、下方向に式を複写させました。 すると、全然違う結果が出てきてしまいました(ToT) imogasiさんが提示してくださったモデルではうまくいったのですが、いざ私自身のデータを貼り付けてやってみると、うまくいかなかったのです。 mu2011さんとokdeathさんのやり方で実行すると、どちらの場合も同じ値が返され、正しい値が求められたので、問題は解決したのですが…imogasiさんのやり方で上手くいかなかったのは心残りですので、もしお暇でしたら、再度ご教授願いたいです<m(__)m>

noname#204879
noname#204879
回答No.2

お望みどおりの手法と異なるので別解ということで、参考に供します。 (画面幅を広げてお読みください)     A        B     C     D      E 1 data     data         data 2 セパタクロー ペタンク       ホルヌッセン   FALSE 3 ペタンク   カモギー       ヤールギレッシュ 4 クリケット  ブズカシ       クロッケー 5 ブズカシ   ホルヌッセン     タスポニー 6 コクボル   ヤールギレッシュ 7 ハーリング  クロッケー 8 カモギー   タスポニー 9 1.セル E2 に式 =COUNTIF(A$2:A$20,B2)=0 を入力   (範囲 A2:A20 の行番号の前に $ を付すこと。A$2:A$20 は A$2:A$200 とかでも構わない)   (引数の B2 の行番号の前に $ を付けてはなりませぬ)   (なお、セル E1 は空白のままに放置) 2.次の条件で[フィルタオプションの設定]を実行するだけ    [抽出先]     “指定した範囲”    [リスト範囲]   $B$1:$B$8($B$1:$B$100 でも構わない)    [検索条件範囲]  $E$1:$E$2    [抽出範囲]    $D$1    “重複するレコードは無視する”にチェック入れ

dj-s
質問者

お礼

ご回答ありがとうございます。 しかし、少し私の質問の仕方が悪かったようで…C列にはそもそも最初の段階では、何もデータが入っていないのです(>_<)

  • okdeath
  • ベストアンサー率28% (13/46)
回答No.1

こんにちわ。 最初にA列のデータは昇順に並べ替えてください。 C2 : =if(type(vlookup(b2,a:a,1,0))=16,b2,"") これを必要な場所まで下にコピーペーストでokです。

dj-s
質問者

お礼

すごく簡単にできました! ありがとうございます<m(__)m>

関連するQ&A