アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんは。
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>

A 回答 (6件)

こんにちわ。


最初にA列のデータは昇順に並べ替えてください。

C2 : =if(type(vlookup(b2,a:a,1,0))=16,b2,"")

これを必要な場所まで下にコピーペーストでokです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/20 00:12

お望みどおりの手法と異なるので別解ということで、参考に供します。


(画面幅を広げてお読みください)
    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
   “重複するレコードは無視する”にチェック入れ
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/20 00:11

考え方は簡単。

しかし質問の表現振りから見るレベルでは難しい。
A列の値を元にB列の中に該当があるか調べるーー>VLOOKUP関数
A.ありーー>値が返る
B.なしーー>ISROORで判定して、TRUEが返る
ーー
次に難しいのは、C列に「抜き出す」こと。
常常言っているが、エクセル関数では、抜き出しはストレートには難しい。Googleで「imogasi方式」で照会すれば、過去のこのコーナーの抜き出し問題の回答例が多数出てくる。それらを勉強のこと。
imogasi方式は、該当のものに上から連番を降って、その連番に当たる行にデータを引っ張ってくる理屈で、作業列を1列使う。
使わない式は上記に載っているが、並みのエクセル関数の熟練レベルでは理解できない。
==
例データ(ごたごた書かなくても、こんな簡単な例で判るのだ。)
A2:D6
A列  B列    C列   D列
abFALSE
bxFALSE
cdTRUE1
dfFALSE
eaTRUE2
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に有る。略。
    • good
    • 0
この回答へのお礼

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>

お礼日時:2009/05/20 00:10

一例です。


C2に=IF(COUNTIF(A:A,B1),"",B2)として下方向にコピー
    • good
    • 0

NO4です。


数式に誤りがありましたので訂正します。
C2に=IF(COUNTIF(A:A,B2),"",B2)として下方向にコピー
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/20 00:13

#3です。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!