• ベストアンサー

エクセルでセル内の文字列を検索して組み合わせごとに分類する

Excel2003について質問致します。 A列にはそれぞれ[a, b, c, ...]とカンマとスペースで分けられた文字列が複数個格納されています。 B列には演算式によって、A列に"a"と"b"が含まれていれば"1"を返し、"c"と"d"と"e"が含まれていれば"2"を返し…全てに当てはまらない場合は"99"を返す、という条件で値を入れたいと考えております。 組み合わせの数は9つあり、if文で分類しようと思いましたがネスト制限によりエラーが出ました。 良い案をお持ちでしたら是非ご教授頂ければと思います。

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

  • ベストアンサー
回答No.4

#2さんのおっしゃるとおり、caseでユーザー関数を作るほうがスマートだと思います。 ワークシートだけでやるにはifのネストの制限でどうやっても出来なさそうなので、単純に「aがあれば1、bがあれば2、cがあれば4…」と表示させるのでは使えませんか? a→1 b→2 c→4 d→8 e→16 として足し算すればそれぞれの文字が含まれているかいないか判別できます。 =IF(ISERROR(FIND("a",A1)),0,1) +IF(ISERROR(FIND("b",A1)),0,2) +IF(ISERROR(FIND("c",A1)),0,4) +IF(ISERROR(FIND("d",A1)),0,8) +IF(ISERROR(FIND("e",A1)),0,16)   【本当は一行の(ひとつのセルに入る)数式です】 「A1の中に"a"を捜し、エラーが出れば0、そうでなければ1」足す「A1の中に"b"を捜し、エラーが出れば0、そうでなければ2」足す… つまり aとbがあってc,d,eがない場合は「3」 bとcがあってa,d,eがない場合は「6」 a,c,dの場合は「13」 b,d,eの場合は「26」等々 【見た目にわかりやすくしたければ、1、2、4、8、16のかわりに1,10,100,1000,10000でも良いと思います。 さらに、セルの書式設定をユーザー定義にして「00000」とすればもっと見やすいかも:二進数表記みたいなものです。edcbaと並んでいて1の桁の文字はある、0の桁の文字はない】 こうすると0~31まで(つまり32通り)の数字が出てきますがそのうちの九つしか使わないので、本来「99」と表示させたいものまでなんらかの数字で表示されてしまいます。 。。で、この表示された数字を本来表示させたい値に変換する表を 別途作ってvlookupするのもひとつの方法ではないかと。 VLOOKUP(◆◆,table,2) ◆◆は上記のIF()+IF()+… table の中身 1  99 2  99 3  1   (aとbだけある場合) 4  99 5  99 6  2   (bとcだけある場合) : : 12 99 13 3   (a,c,dの場合) 14 99 : : 25 99 26 4   (b,d,eの場合) 27 99 :

tamatto
質問者

お礼

ご回答ありがとうございます。 早速教えて頂いた方法を試してみようと思います。 また、丁寧なご解説ありがとうございます。

その他の回答 (3)

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

次の方法は如何でしょうか。 =IF(COUNTIF(A1,"*a*")*COUNTIF(A1,"*b*"),1,IF(COUNTIF(A1,"*c*")*COUNTIF(A1,"*d*")*COUNTIF(A1,"*e*"),2,99))

tamatto
質問者

お礼

ご回答ありがとうございます。 しかし分類が9つあり、この方法だとネストは7つまでという制限にひっかかってしまうと思われます。 COUNTIF関数は初めて知りましたので他の処理の際には、是非参考にさせて頂きます。

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

>組み合わせの数は9つあり とは、>"a"と"b"が含まれていればのようなのが1つに当たるのか? ーー 1つaとbを両方含むの1つだけなら =IF(AND(NOT(ISERROR(FIND("a",A1))),NOT(ISERROR(FIND("b",A1)))),1,"") のようなのでできそうだが(1例だけ) 場合の数が9つもあれば、関数利用では式が複雑になって無理ではないか。 ーー 場合の各々はaとbのように2つの条件か?2ツあり3ツありか? ーー VBAでユーザー関数ででも記述しないと無理ではないか。

tamatto
質問者

補足

説明不足で申し訳ありません。 >組み合わせの数は9つあり とは、>"a"と"b"が含まれていればのようなのが1つに当たるのか? その通りです。この場合"a"と"b"の両方が含まれている事が1を返す条件となります。 >場合の各々はaとbのように2つの条件か?2ツあり3ツありか? 1~5つになります。 >VBAでユーザー関数ででも記述しないと無理ではないか。 アドバイスありがとうございます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

補足要求 "a,b,c"の順番は一定ですか?"b,a,c"の場合もあり? "aとb"両方ですか?片方だけでも"1" "a"と"b"が含まれていて、かつ、、"c"と"d"と"e"が含まれている場合は"1"or"2"or(1+2)で"3"? これが分からないと数式が確定しません。

tamatto
質問者

補足

説明不足で申し訳ありません。 >"a,b,c"の順番は一定ですか?"b,a,c"の場合もあり? 順番は後者のように、一定ではありません。文字列はアルファベット2つ+数字4桁の6つの半角英数字で構成されており、順番はソートされておりません。 >"aとb"両方ですか?片方だけでも"1" 両方です。全てが含まれている事が条件となります。 >"a"と"b"が含まれていて、かつ、、"c"と"d"と"e"が含まれている場合は"1"or"2"or(1+2)で"3"? いいえ。基本的に一つの組み合わせが当てはまった場合は他の組み合わせは無いと考えて頂いて構いません。 以上、よろしくお願い致します。

関連するQ&A