• ベストアンサー

COUNTIFを使って文字を抽出したい

  A 1 ビタミン   カルシウム 2 ビタミン 3 鉄 4 ビタミン 5 マグネシウム というようにA1のセルには二行にわたって文字が入力されています。 このA列で、「ビタミン」を含むセルはどのようにカウントするのですか? COUNTIFで「=COUNTIF(A1:A5,"ビタミン")」とすると、2 となってしまいます。この列に含まれるビタミンの数、つまり3と計算させる関数を教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 #4 のWendy02 です。 >もう素人にはお手上げの範疇でございます。 ちょっと、コメント。 私は、Excelの関数を最初に勉強して思ったことは、むずかしい数式は、たぶん、誰かが試行錯誤で偶然も左右して生まれて、それに理屈をつけて広まったのだろうなって思いました。それで、それらをパターン化していく中で、組み合わせて使っていくのだろうと思いました。 >IF関数って、かっこの中に入るのは、(論理式,RUE,FALSE)であったような気がします。 IF(論理式,TRUE,FALSE) は、そのとおりです。 =IF(B1="","", ↑ 単なるエラー処理です。B1に何もなかったら、何も出さないでおく、とエラー処理を書くのは、ユーザーに対する思いやりなのですが、逆に、分かりにくくなるのも否定できませんね。 COUNTIF($A$1:$A$10,"*"&B1)+COUNTIF($A$1:$A$10,B1&CHAR(10)&"*") 問題は、こちら側ですね。 COUNTIF($A$1:$A$10,B1&CHAR(10)&"*")) CHAR(10) というのは、セル内の改行コードのことです。Alt+Enterのことです。 それから、「*」の意味は、「0文字以上、文字は何でも」という意味なのですね。あたりまえのようで、あたりまえじゃないのですね。1文字以上ではありません。

muji324
質問者

お礼

わかりやすく説明していただきまして、大変ありがとうございました。 ただの記号だと思っていたものが、大いに意味のある記号と知り、ただただ驚きです。 CHAR(10) 。 覚えました!(使いこなせるかは、別として!) エクセル作成に苦労しておりましたが、少し楽しくなってきました。 本当にありがとうございました。

その他の回答 (5)

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

配列数式ですが別解を考えました。 =SUM(IF(ISERROR(FIND("a",A1:A8)),0,1)) と入れて、SHIFT+CTRL+ENTERキーを押します。 例データ as s a f a s f as で4となります。 >あらかじめ別の列に文字の一覧をつくっておき ビタミンなど文字の一覧をB列につめて作っておき、 式の複写で ビタミン数 =COUNTIF(A1:A5,"*B1*") のB1をB2、B3のように変化させ また$A$1:$A$5とA列の範囲はずれないようにすればよい。 「文字の一覧をつくっておき」は関数でできますが、私の昨日の質問回答に あります。 ただ#2の補足の意味をよく考えてないが、それを満たすのは難しいかもしれない。(配列数式の上記回答も同じ。)

muji324
質問者

お礼

どうもありがとうございました。 =SUM~の式も本当に4とでました。 #4様と同様、関数が難しすぎて理解できませんでしたが、これから勉強させていただきます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 範囲をA1:A10 までして、バリエーションを試してみました。  ビタミン  カルシウム 本来、1レコードに二種類入っているものを、一旦、テキストにコピーして、再び、ワークシートに貼り付け、切り分けたら簡単に済んだのだと思いますが、 B1から下に、抽出項目を入れ、以下のような式でフィルダウン・コピーすれば出来るかと思います。 =IF(B1="","",COUNTIF($A$1:$A$10,"*"&B1)+COUNTIF($A$1:$A$10,B1&CHAR(10)&"*")) 最初、少ない量でお試しください。

muji324
質問者

お礼

もう素人にはお手上げの範疇でございます。 IF関数って、かっこの中に入るのは、(論理式,RUE,FALSE)であったような気がします。FALSE部分にあてはまるのはCOUNTIF($A$1:$A$10,"*"&B1)+COUNTIF($A$1:$A$10,B1&CHAR(10)&"*")ですか? なんですか、CHARって。そのあとの(10)も・・・。 むつかしすぎますが、この意味がわかった日には、きっと少し頭がよくなるのでしょうね。

  • shiotan99
  • ベストアンサー率68% (140/203)
回答No.3

No.1です。 >「ビタミン」と「ビタミンA」という文字があり 「ビタミンA」の個数を引けばいいのではないでしょうか? B1 に「ビタミン」と入力されていて、「ビタミンA」の個数を求める数式が C5 に入っているとすれば、 =COUNTIF($A$1:$A$5,"*"&B1&"*")-C5 他にも 「ビタミンC」とかあれば、それもすべて引いてください。 フィルコピーするなら、範囲は $ をつけて絶対参照にしてくださいね。

muji324
質問者

お礼

なるほど。 そりゃそーでした。頭はやわらかくないとダメですね! どうも有難うございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

=COUNTIF(A1:A5,"*B1*") を =COUNTIF(A1:A5,"*"&B1&"*") のようにして下さい

muji324
質問者

お礼

ありがとうございました。 すぐに教えていただいた式で計算しなおしたところ、ひとつ、やっかいなことがでてきました。 それは、「ビタミン」と「ビタミンA」という文字があり、本当は、ビタミン数 2、ビタミンA数 7、なのにその式をあてはめるとビタミン数 9になってしまいます。こんな場合の関数とはどうしたらいいですか?

  • shiotan99
  • ベストアンサー率68% (140/203)
回答No.1

こんにちは~ 「ビタミン」の前後に *(アスタリスク)をつけてください。 =COUNTIF(A1:A5,"*ビタミン*")

muji324
質問者

お礼

感動しました! 大変、ありがとうございました。 ついでといってはなんですが、いちいち,"ビタミン"というように、文字を入力するのがすごく面倒なため、あらかじめ別の列に文字の一覧をつくっておき、そのセル番号を入力するなんて、可能でしょうか?   (例)   A           B 1 ビタミン      ビタミン   カルシウム 2 ビタミン      鉄 3 鉄          マグネシウム 4 ビタミン     カルシウム 5 マグネシウム A列のビタミン数 =COUNTIF(A1:A5,"*B1*") というような。

関連するQ&A