EXCELで、A列に検索対象の文字列を列挙し、B列に検索用語句を列挙してあります。どちらも順不同で、レコードの数もそれぞれ違います。

A列のレコードにB列の検索用語句が含まれているかいないかで、C列に”ある”か”ない”かが分かるようにしたいのですが、何か良い方法はあるでしょうか。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/06/28 03:52:02
  • 終了:2011/06/28 06:07:00

ベストアンサー

id:windofjuly No.3

うぃんど回答回数2625ベストアンサー獲得回数11492011/06/28 05:09:47

ポイント500pt

回答No.1は勘違いでした。すみません

 

C1に下記のように入力してCtrl+Shift+EnterでB1:B10のいずれかのキーワードが含まれている場合に"ある"、いずれも含まれていない場合に"ない"が表示されます

=IF(SUM(IF(ISNUMBER(FIND($B$1:$B$10,$A1)),1,0))>0,"ある","ない")

処理の流れとしては次のようになっています

(1)FIND($B$1:$B$10,$A1)

A1にB1が含まれればA1中の文字位置を返す。無ければ#N/Aエラーを返す

A1にB2が含まれればA1中の文字位置を返す。無ければ#N/Aエラーを返す

・・・

(2)ISNUMBER(FIND($B$1:$B$10,$A1))

数値なら真(存在)、それ以外は偽(不在)

(3)IF(ISNUMBER(FIND($B$1:$B$10,$A1)),1,0))

真なら1、偽なら0という数値に置き換える

(4)SUM(IF(ISNUMBER(FIND($B$1:$B$10,$A1)),1,0))

置き換えた数値をすべて加算する

(5)IF(SUM(IF(ISNUMBER(FIND($B$1:$B$10,$A1)),1,0))>0,"ある","ない")

加算した結果が0以上であれば"ある"、0なら"ない"

id:iichico

望む結果が得られました。

検索対象のレコードの数だけ、オートフィルを使ってコピーするようなので

列の並びを整理してオートフィルタを有効にすれば、データの取り出しもできそうです。

ありがとうございました。

2011/06/28 06:03:56

その他の回答(2件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492011/06/28 04:11:38

順に行って動作確認と内容理解を

(1)MATCHワークシート関数

第三引数に0を指定すれば並び順は関係なくなり、完全一致のみを探し当て、第二引数上の位置をしめす。該当無しの場合は#N/Aエラーを出力する

=MATCH(A1,B:B,0)

(2)ISNAワークシート関数

式の結果が#N/Aエラーの場合に真、それ以外は偽

=ISNA(MATCH(A1,B:B,0))

(3)IFワークシート関数

真偽で処理を分ける

=IF(ISNA(MATCH(A1,B:B,0)),"ない","ある")
id:iichico

完全一致ではなく、A列のレコード内の文字列にB列の語句を含んでいれば真にしたいです。

2011/06/28 05:24:52
id:akira623 No.2

akira623回答回数11ベストアンサー獲得回数02011/06/28 05:03:16

VBAを使うのが早いと思います。

下記HPなど参考にして挑戦してみてください。

http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_find.html

id:windofjuly No.3

うぃんど回答回数2625ベストアンサー獲得回数11492011/06/28 05:09:47ここでベストアンサー

ポイント500pt

回答No.1は勘違いでした。すみません

 

C1に下記のように入力してCtrl+Shift+EnterでB1:B10のいずれかのキーワードが含まれている場合に"ある"、いずれも含まれていない場合に"ない"が表示されます

=IF(SUM(IF(ISNUMBER(FIND($B$1:$B$10,$A1)),1,0))>0,"ある","ない")

処理の流れとしては次のようになっています

(1)FIND($B$1:$B$10,$A1)

A1にB1が含まれればA1中の文字位置を返す。無ければ#N/Aエラーを返す

A1にB2が含まれればA1中の文字位置を返す。無ければ#N/Aエラーを返す

・・・

(2)ISNUMBER(FIND($B$1:$B$10,$A1))

数値なら真(存在)、それ以外は偽(不在)

(3)IF(ISNUMBER(FIND($B$1:$B$10,$A1)),1,0))

真なら1、偽なら0という数値に置き換える

(4)SUM(IF(ISNUMBER(FIND($B$1:$B$10,$A1)),1,0))

置き換えた数値をすべて加算する

(5)IF(SUM(IF(ISNUMBER(FIND($B$1:$B$10,$A1)),1,0))>0,"ある","ない")

加算した結果が0以上であれば"ある"、0なら"ない"

id:iichico

望む結果が得られました。

検索対象のレコードの数だけ、オートフィルを使ってコピーするようなので

列の並びを整理してオートフィルタを有効にすれば、データの取り出しもできそうです。

ありがとうございました。

2011/06/28 06:03:56

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません