- 締切済み
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つ以上、同一のキーワードが含まれることもあります。 原因らしきものの検討がつきません。 どうかお知恵をお貸しください。 #あるいは他のデータ個数抽出方法があれば、教えてください。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
下記でできないでしょうか。 配列数式になじみがないかもそれないが。やってみるとうまくいきそう。 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は「りんごジュース」という連語のことをあらわしています。
- mu2011
- ベストアンサー率38% (1910/4994)
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)でお試しください。
お礼
ありがとうございます。 A列指定にしたのですが、やはりダメでした。 期待値より少ない数が出てしまいます。 メール本文ということで、何か邪魔なものがついてるんでしょうか。 CSV形式で保存されていたものなので、問題ないと思ったのですが。。 実は、こちらの回答↓を参考にしていたのですが、 http://okweb.jp/kotaeru.php3?q=705462 No.3の回答中にある「同じセルに同じ単語が2つあるとダメ」というのが気になっています。 なぜダメなんでしょうか。 mu2011さんにお尋ねするのはちょっと違うかもしれませんが、理由をご存知なら教えてください。 何度もすみませんm(_ _)m
- mu2011
- ベストアンサー率38% (1910/4994)
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として数式が{ }で囲まれるようにして下さい。
補足
回答ありがとうございました。 説明不足ですみませんでした。 セル内に2つ以上同一キーワードがある場合でも、 求めたいのは「セルの個数」なので、countif を使えばいいのかなと考えた次第です。 せっかく教えていただいたのに、申し訳ありません。 教えていただいた関数も試しに入れてみたのですが、 「正しくない」とエラーではじかれてしまいました。
- mshr1962
- ベストアンサー率39% (7417/18945)
単純ですが上記の式だと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))
補足
ご回答ありがとうございます。 列全体を指定してみましたが、結果は同じでした。 書いていただいた SUMPRODUCT...から始まる関数を試してみましたが、 NUMエラーが出てしまいました。 不勉強ですみませんが、もしよければ、この関数の意味を教えていただいてもいいでしょうか。
- onara931
- ベストアンサー率25% (141/545)
「"*"&A1&"*"」の部分ですが、キーワードがひとつしか認識されないのではないでしょうか? 2つ以上の同一キーワードがあっても、カウントでは「1つ」とだけ認識されてしまう気がします。 ※じゃあどうすればいいのか、っていのが、まだ思いつきません。すいません。
補足
回答ありがとうございます。 私の説明不足でした。すみません。 数えたいのは「セルの個数」なので、セル内に同一キーワードが 2つ以上あっても、1カウントで問題ないです。 上記の例では「りんごというキーワード」は3つですが、 求めたいのは「りんごというキーワードを含むセルの個数」なので、結果が2であればOKです。
お礼
返事が遅くなり、すみません。 データが少ない場合は、ご指摘の方法でできました。ありがとうございました。 ただ、400件近くのメールデータとなると、何が悪いのか、やはり期待値より 少ない値が出てしまいます。 文字列ということで、何かが悪さをしているのかもしれません。 Excelじゃなくて、別の方法で集計することも考えてみます。 ありがとうございました。