• 締切済み

Countif関数について教えてください。

アンケートメールをCSV出力したものを集計しようと考えています。 Excelで、countif関数を使ってキーワードを元に数を出そうと思ったのですが、 正しい結果が出ません。 [hoge.xls]      A 1 りんごジュースは   りんごからできている 2 りんごとみかんは   違う果物だ 3 みかんとバナナでは   みかんの方がすっぱい といったデータがあるときに、「りんご」というキーワードが 含まれるセルの個数を出したいと考えています。 結果を出すのは、実際には別のファイルで、A列のキーワードが何個あるかをB列に出したいと考えています。 上記の例だと    A    B 1 りんご   2 2 バナナ   1 といった感じです。 そこでこういう関数を出してみました。 COUNTIF([hoge.xls]Sheet1!$A$1:$A$3,"*"&A1&"*") データが少ない場合には、この関数で正しく結果が出るのですが、 実際には300件以上のデータがあり、結果が実際の 件数よりもずっと少なく出ているような感じがします。 メールですので、元データには改行も含まれますし、 1つのセルに2つ以上、同一のキーワードが含まれることもあります。 原因らしきものの検討がつきません。 どうかお知恵をお貸しください。 #あるいは他のデータ個数抽出方法があれば、教えてください。 よろしくお願いします。

みんなの回答

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

下記でできないでしょうか。 配列数式になじみがないかもそれないが。やってみるとうまくいきそう。 A1:A10に a we as df ghj zaa sd saer aaadr qqwe を入れます。 この各行の中でaを含んでいる行を数えると、 5行あります。 それはA12(どこでもよい)に =SUM(IF(ISERROR(SEARCH("a*",$A$1:$A$10)),0,1)) といれてSHIFTキーとCTRLキーを左手指で 抑えたまま、右手指でENTERを押す。 両端に{}が現れますが配列数式のしるしです。 SEARCH関数を使ったのは、*というワイルド カードを使えるからでFINDではダメです。 意味は各行でaを含む文字列である場合1をそれ以外 (Errorになる)では0をあたえ、それらを 第1-10行にわたって加える(SUM)ことをせよというものです。 aは実際の例の語句を置き換えてやってみてください。 その他の英字も語句の連なりと考えてください。 a=りんご b=ジュースの場合はabは「りんごジュース」という連語のことをあらわしています。

nana_ch
質問者

お礼

返事が遅くなり、すみません。 データが少ない場合は、ご指摘の方法でできました。ありがとうございました。 ただ、400件近くのメールデータとなると、何が悪いのか、やはり期待値より 少ない値が出てしまいます。 文字列ということで、何かが悪さをしているのかもしれません。 Excelじゃなくて、別の方法で集計することも考えてみます。 ありがとうございました。

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

NO.3です。 関数エラーは、余計な括弧が挿入された為ですので、以下の様に変えて下さい。 =SUM((LEN([hoge.xls]Sheet1!$A$1:$A$300)-LEN(SUBSTITUTE([hoge.xls]Sheet1!$A$1:$A$300,A1,"")))/LEN(A1)) この関数は、検索文字列の個数を計数する為で、ご質問者の期待値になりません、理解不足ですみませんでした。 尚、セル数のみであれば、COUNTIF関数で問題ありませんが、検索範囲をA列指定(A:A)でお試しください。

nana_ch
質問者

お礼

ありがとうございます。 A列指定にしたのですが、やはりダメでした。 期待値より少ない数が出てしまいます。 メール本文ということで、何か邪魔なものがついてるんでしょうか。 CSV形式で保存されていたものなので、問題ないと思ったのですが。。 実は、こちらの回答↓を参考にしていたのですが、 http://okweb.jp/kotaeru.php3?q=705462 No.3の回答中にある「同じセルに同じ単語が2つあるとダメ」というのが気になっています。 なぜダメなんでしょうか。 mu2011さんにお尋ねするのはちょっと違うかもしれませんが、理由をご存知なら教えてください。 何度もすみませんm(_ _)m

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

CONTIF関数の計数はセル数になりますので、期待値より少になります。以下の方法をお試しください。 =SUM((LEN(([hoge.xls]Sheet1!$A$1:$A$300)-LEN(SUBSTITUTE(([hoge.xls]Sheet1!$A$1:$A$300,A1,"")))/LEN(A1)) 入力完了時、ctrl+shift+enterとして数式が{ }で囲まれるようにして下さい。

nana_ch
質問者

補足

回答ありがとうございました。 説明不足ですみませんでした。 セル内に2つ以上同一キーワードがある場合でも、 求めたいのは「セルの個数」なので、countif を使えばいいのかなと考えた次第です。 せっかく教えていただいたのに、申し訳ありません。 教えていただいた関数も試しに入れてみたのですが、 「正しくない」とエラーではじかれてしまいました。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

単純ですが上記の式だとA1:A3の3セルしか見ていません。 COUNTIF([hoge.xls]Sheet1!$A:$A,"*"&A1&"*") で列全体を指定してみてください。 >1つのセルに2つ以上、同一のキーワードが含まれることもあります。 =SUMPRODUCT((LEN([hoge.xls]Sheet1!$A:$A)-LEN(SUBSTITUTE([hoge.xls]Sheet1!$A:$A,A1,"")))/LEN(A1))

nana_ch
質問者

補足

ご回答ありがとうございます。 列全体を指定してみましたが、結果は同じでした。 書いていただいた SUMPRODUCT...から始まる関数を試してみましたが、 NUMエラーが出てしまいました。 不勉強ですみませんが、もしよければ、この関数の意味を教えていただいてもいいでしょうか。

  • onara931
  • ベストアンサー率25% (141/545)
回答No.1

「"*"&A1&"*"」の部分ですが、キーワードがひとつしか認識されないのではないでしょうか? 2つ以上の同一キーワードがあっても、カウントでは「1つ」とだけ認識されてしまう気がします。 ※じゃあどうすればいいのか、っていのが、まだ思いつきません。すいません。

nana_ch
質問者

補足

回答ありがとうございます。 私の説明不足でした。すみません。 数えたいのは「セルの個数」なので、セル内に同一キーワードが 2つ以上あっても、1カウントで問題ないです。 上記の例では「りんごというキーワード」は3つですが、 求めたいのは「りんごというキーワードを含むセルの個数」なので、結果が2であればOKです。

関連するQ&A

  • ExcelのCOUNTIF関数での<1>等の意味

    こんにちは。 COUNTIF関数で質問があります。 以下のようなデータがあります。 A列にデータ、B列にCOUNTIF関数が入っていてその結果を返しているとします。 (いずれも1行目~6行目までにデータが入っています) (A列)          (B列) <1>りんご        2(=COUNTIF($A$1:$A$6,A1)) <2>みかん        2(=COUNTIF($A$1:$A$6,A2)) パイナップル      1(=COUNTIF($A$1:$A$6,A3)) 桃             1(=COUNTIF($A$1:$A$6,A4)) りんご          1(=COUNTIF($A$1:$A$6,A5)) アボカド         1(=COUNTIF($A$1:$A$6,A6)) 疑問なのは、厳密に言うと上の条件だとB列は全部1になるのではないかと思ったのに、なぜ1・2行目は2を返してくるのでしょうか、ということです。 <1>や<2>が頭についたものでそのようになっているので、これは何か意味があると思いました。 どのような意味を持つのでしょうか。 また、<1とか<をつけても自分が思っていたような結果が返ってこないので、そもそも上のような例で<がつくとどういうことになるのでしょうか。 大変お手数ですが、よろしくお願いいたします。

  • エクセルのcountif関数で

    WindowsXPでEXCEL2003を使っています。 A列に固有名詞が入っており、 A列の中でのダブりチェックをcountif関数を使って、 実行しました。式は =countif($A$1:A7,A1) というような感じです。 ところが、見た目は全く変わらないのに、 (下記の図でいうと、「りんご」) 返ってきた数字は1でした。 ただし、「なし」のように2が返ってくるものもあります。 A列      B列 1 りんご     1 2 りんご     1 3 みかん     1 4 いちご     1 5 もも      1  6 なし      2 7 なし      2 (ずれて見苦しいかもしれませんがお許しを) 不思議に思い、一度エクセルからcsvに変換し、 またエクセルファイルになおして、 チェックしてみましたが、結果は同じ。 if関数を使ってみたらどうなるだろうかと チェックしてみたら今度は A1とA2の「りんご」は同じものである という 結果が返ってきました。 countif関数では別物と判断し、if関数では同じもの と判断する・・・ というのは、一体どういうことなのでしょうか? countif関数をなにか勘違いしているのかもしれませんが、よろしくお願いいたします。

  • エクセルで一致する数をカウントしたい

    エクセル2010、OSはWindoes7です。 エクセルでセルに入っている単語、文章で一致するものの数をカウントしたいです。 例1 A列に以下のような単語が入ってるとします A1 りんご A2 みかん A3 バナナ さて、A列の「リンゴ」という単語の数を数えたい場合、普通は以下のようにします。 =countif(A1:A3,"りんご") (引数2は、どこかのセルに入れた凡例を参照するもよし) こうすれば結果は1となります。 他の単語の場合も同様です。引数2を代えれば、どんな単語でも自在にできます。 では以下のような場合はどうすればいいでしょうか? 例2 A列に以下のような単語が入ってるとします A1 りんご A2 みかん A3 バナナ A4 りんご   みかん A5 いちご   りんご A6 さっちゃんはね、バナナが大好き 本当だよ (注 A4,A5はAlt+Enter入力で、セル内改行してある) この状態で、A列にある、「りんご」の数をカウントせよ、という関数命令を実行させると 解答が りんご= 3 となるような関数を知りたい。 同様に「みかん」 =3  「バナナ」=2 と返してくるような関数を知りたい。 ちなみに、例2に対してcountif関数を実行させると、結果は りんご 1 みかん 1 バナナ 1 となる。 なぜならcountif関数では、カウントする定義は「一文字目から最終文字まで、完全一致」となっているので・・・。 よろしくお願いします。

  • countif関数の使い方について

    お世話になります。 下記の数式の{}がどういう風に計算されてるのか 教えてください。 A 1りんご 2りんご 3みかん 4りんご =SUM(COUNTIF(A1:A4,{"りんご","みかん"})) 自分なりに調べて配列数式?を意味してるということまでは分かったのですが どういう風にA1:A4と式が組まれてるのかがいまいちピンときません。。 またcountif関数がorやand関数と組み合わせできない理由も 配列が関係してるんでしょうか? 詳しい方よろしくお願いします。 ※当方エクセル初心者です

  • COUNTIF関数で

    セル範囲C10から31にある 文字列「A」の個数を求める為に =COUNTIF(C10:C31,"A") と入れてあります。 これを、文字列「A」と「B」の2つの個数を出すようにするにはどうすればよいでしょうか?

  • こんな関数ありますでしょうか?

    こんな関数ありますでしょうか? 日頃お世話になっております。 Excel2000で、指定した検索条件に一致する隣のセルの 個数を取り出したいのですが、出来ますでしょうか? 「例」      A列     B列 1    みかん   東北 2   りんご    東北 3    りんご    関東 4   いちご    関西 5   りんご    九州 6   みかん    九州 7   いちご    四国 8   みかん    関東 上記データーより、A列の「みかん」を検索条件として B列より「東北」=1 「九州」=1 「関東」=1 というデーターを、取り出したいのですが。。。 ご教示お願い致します。 m(__)m

  • エクセル2003 countif関数の応用??

    エクセル2003です。 A列に”りんご”、”みかん”、”すいか”と果物の名前が入っています。 B列にはその果物が売れたときにだけ、 その重量を記入します。(全部1個ずつうります。) 別シートで りんごが何個売れたかを集計した式を作りたいのです。 Countif関数を使って出来そうな気がしたのですが、 検索条件をA列にすると すでにA列に記入済みの売れていないものも数えられてしまい、 売れたりんごの数だけを導き出すことができないのです。 If関数も使えば出来そうな気がするのですが、 うまくいきませんでした。 良いアイデア有りますでしょうか? 宜しくお願いします。 或いは集計機能を使って、同じシートにうまいことできるのだろうかとも 思うのですが、、、

  • excel関数 間違ったデータをピックアップしたい

    列Aの各セルに、みかn、りんご、バナナ、メロンなどと入っていて、列Bの各セルは、"A"~"F"の人気ランクが入っています。 列A   列B   みかん  A りんご  C バナナ  D みかん  A メロン  C 列C以降にはその他の色々なデータが入っていますが、それはさておき、列AとBだけの関係を見ると、みかんは必ず"A"、りんごは必ず"C"というように、果物別の評価は決まっているはずです。ところが、間違って入力されて、ある行ではみかんが"A"で、別の行ではみかんが"C"だったりしたら、調べて正しい方に統一したいのです。 そこで、ひとつの果物に対応する評価が複数あるものをピックアップしたいのですが、どうすればいいでしょうか。そのほかの集計作業に関数を使っているので、これも関数で出来ればいいかなと思うのですが。

  • Excel 関数 照合した結果がどこにあるのか表示したいのですが

    照合したいデータがあります。 A列とB列のセルを照合の結果、B列のセルがA列のどこにあるか、C列に行番号を表示したいのですが。 どのような関数がいいのか教えてください。よろしくお願いします。   A列   B列   C列 1 リンゴ みかん  2 2 みかん いちご  4 3 バナナ レモン  6 4 いちご メロン  5 5 メロン ぶどう  × 6 レモン

  • エクセルで文字列の個数を数える

    ある範囲のエクセルデータから決まった文字列の個数をカウントする関数の使い方が判れば教えてください。 例えば、A1からH200までのデータより、”リンゴ”という文字列が何個あるかカウントしたいのですが。 COUNTIF(A1:H200,"*リンゴ*")とすると”リンゴ”という文字列が含まれるセルの個数は出たのですが、”リンゴ”という文字列が複数含まれるセルもあるので、”リンゴ”という文字列の個数とは 一致しないようなのです。 どなたか、よろしくお願いします。

専門家に質問してみよう