• ベストアンサー

エクセルで文字の検索

例えば以下のような数値データの中から「A」または「B」または「C」を検索して、その文字数を取り出したいのですが、FIND関数の検索文字列にOR関数を使ってA、B、Cを指定すれば、エラーになります。 この場合使える関数があれば教えていただきたいです。 よろしくお願いします。 123A456 123B456 123C456

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.8

解答No2です。 式を少し変形すればよいでしょう。 =IF(COUNTIF(A1,"*A*"),"A","")&IF(COUNTIF(A1,"*B*"),"B","")&IF(COUNTIF(A1,"*C*"),"C","")

koko1973
質問者

お礼

ありがとうございます。できました。たびたびお手数おかけしましてすみませんでした。

その他の回答 (7)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

こんばんは! 横からお邪魔します。 すでに色々回答が出ていますのd、 参考程度で目を通してみてください。 (参考になるかどうか判りません) 検索文字の出現順や出現個数は無視して、 結局検索対照文字がある場合は表示させ、ない場合は表示させない方法です。 ↓の画像のように検索文字を別表に入力し、あればその文字を表示させるようにしてみました。 かなり泥臭い方法です・・・ B2セルに =IF(ISNUMBER(FIND($D$2,A2)),$D$2,"")&IF(ISNUMBER(FIND($E$2,A2)),$E$2,"")&IF(ISNUMBER(FIND($F$2,A2)),$F$2,"") という数式を入れ、オートフィルで下へコピーしています。 尚、セル内に検索文字があれば表示される順は 別表の左からになります。 以上、長々と書きましたが 参考になれば幸いです。 的外れなら読み流してくださいね。m(__)m

koko1973
質問者

お礼

ご丁寧に画面ショットまでありがとうございました。応用で使えそうです。ありがとうございました。

noname#204879
noname#204879
回答No.6

[回答番号:No.5]の変更、 E2: =LEFT(SUBSTITUTE(A2,B2,""),D2) を次式に変更しておきます。(上のままでもOKですが、式を短くするために) E2: =LEFT(C2,D2)

koko1973
質問者

お礼

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

noname#204879
noname#204879
回答No.5

ステップ・バイ・ステップ方式ですが…    A      B       C      D    E 1 供試データ 文字前数字 文字以降データ 文字桁 文字 2 123A456      123 A456         1   A 3 123B456      123 B456         1   B 4 123C456      123 C456         1   C 5 34ABC567      34 BC567        3  ABC 6 1234ab5      1234 ab5         2  ab B2: {=LEFT(A2,MATCH(TRUE,(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))>="A",0)-1)}   (配列数式) C2: =SUBSTITUTE(A2,B2,"") D2: =MIN(FIND({1,2,3,4,5,6,7,8,9,0},C2&1234567890))-1 E2: =LEFT(SUBSTITUTE(A2,B2,""),D2)

koko1973
質問者

お礼

ご回答いただきありがとうございます。配列の概念が分かっていないので勉強したいと思います。ありがとうございました。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

> 非常にすみません。文字数でなくて、文字(AかBかC)を取り出したかったのですが、その場合でもう一度ご教授いただけませんでしょうか。 質問は出来るだけ正確にお願いします。 ABCを複数含む「123A1CA12B」と言う文字列が在った場合、欲しいのは「ABC」ですか、「ACAB」ですか? それとも、ABCは常に1つだけしか文字列には存在し無いと言う条件ですか?

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

>文字数でなくて、文字(AかBかC)を取り出したかったのですが、 FIND関数を使うなら以下のような関数になります。 =INDEX({"","A","B","C"},MAX(ISNUMBER(FIND({"","A","B","C"},A1))*{1,2,3,4}))

koko1973
質問者

お礼

ありがとうございます。いろいろなやり方があるのですね。。。うらやましいです。ISNUMBERと配列を勉強します。ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

次のような式にすればよいでしょう =COUNTIF(A1,"*A*")+COUNTIF(A1,"*B*")+COUNTIF(A1,"*C*")

koko1973
質問者

補足

非常にすみません。文字数でなくて、文字(AかBかC)を取り出したかったのですが、その場合でもう一度ご教授いただけませんでしょうか。すみません。よろしくお願いします。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

SUBSTITUTE関数を使用して、"A"、"B"、"C"を空白に置き換え(=削除)し、元の文字列との文字数の差を表示しては如何でしょう。 元の文字列がA1に入っているとして、B1セルにでも以下の式を入れて見てください。 =LEN(A1)-LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"A",""),"B",""),"C",""))

koko1973
質問者

お礼

なるほどです。勉強になりました。ありがとうございました。

関連するQ&A

専門家に質問してみよう