• ベストアンサー

Excel 指定した範囲内に、特定の単語が何回出現するか数える

アンケートの集計をExcelでやっておりまして、複数回答が可能な質問の集計に困っております。 選択肢は「今年」「来年」「再来年」「未定」。 データは以下のように並んでいる状態で、選択肢各々の数をカウントしたいと思います。 A1: 今年 来年 A2: 来年 A3: 来年 再来年 A4: 再来年 : : 「今年」や「未定」、また「再来年」の「再」はユニークな文字列または文字なので、countifを使って求めることができておりますが、 「来年」の数をどのように求めるか、非常に悩んでおります。 検索を駆使して色々調べたのですが数日悩んでも無理でした。。 どなたかお助けいただけないでしょうか。よろしくお願いします!

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

  • ベストアンサー
  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.6

http://support.microsoft.com/kb/213889/ja この方法で可能です。 =SUM(LEN(A1:A7)-LEN(SUBSTITUTE(A1:A7,"来年","")))/LEN("来年")-SUM(LEN(A1:A7)-LEN(SUBSTITUTE(A1:A7,"再","")))/LEN("再") と入力後CTRL+SHIFT+ENTERを押して確定して下さい。

harmoniodeon
質問者

補足

pbforceさん、たびたびの回答ありがとうございました! ずはらしいです、できました! 「入力後CTRL+SHIFT+ENTERを押して確定」は勉強不足でした。 検索したら、「配列数式」との情報が色々でてきますね。 調べておきます。 解決しました。大変ありがとうございました!

その他の回答 (5)

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

こんにちは。 区切り文字が、スペースのようですが、これらは、仮に、「,」「、」「 (全角スペース)」などは、全部、置換してひとつに統一してしまうことも以下でしたら可能です。その上で、全部、それぞれに分けてから、カウントとしています。内部の確保したデータは、それぞれひとつになっています。 '標準モジュール Function SplitCount(rng As Range, findWd As String) As Long   Dim mData() As String   Dim c As Variant   Dim buf As Variant   Dim v As Variant   Dim i As Long   Dim k As Long 'カウント変数   For Each c In rng     '全角スペースは、半角に置換     buf = Replace(c.Value, Space(1), Space(1), , , vbTextCompare)     buf = Split(buf, Space(1))     For Each v In buf       If v <> "" And v <> " " Then         ReDim Preserve mData(i)         mData(i) = Replace(v, Space(1), "")         If mData(i) Like findWd Then k = k + 1         i = i + 1       End If     Next v   Next c   SplitCount = k End Function なお、ワークシートは、SplitCount(範囲,検索文字) とします。 検索文字については、"*年" とワイルドカードは使えます。

harmoniodeon
質問者

補足

ありがとうございます、マクロですね。 わざわざこのようにご丁寧に例を作っていただき恐縮です。 できれば、ファイルの管理上(マクロ等を使用しない他の人間も使うので)Excel関数だけで解決したかったのですが、やはりこれはもうこの域の問題なのでしょうか。 どうしても解決しない場合、使用させていただくかもしれません。 本当にありがとうございました。

noname#79209
noname#79209
回答No.4

エクセル2002ですが、質問文の例で試しましたが、 =COUNTIF(A1:B5,"来*") は「3」となり「5」とはなりませんでした。 =COUNTIF(A2:B6,"再*") は「2」です。 これだと、セルの頭からチェックしてますね。

harmoniodeon
質問者

補足

ありがとうございます。 はい、一つのセル内で複数回出てくる文字列を、さらに範囲内全体でいっぺんにカウントしたいので、なんとなくムリそうですね。。。

  • nobu-
  • ベストアンサー率33% (31/93)
回答No.3

本来の解決法とは思えませんが、取りあえず以下の方法ではでうでしょうか?(データがE7からE10に入っているとして) =COUNTIF(E7:E10,"* 来年")+COUNTIF(E7:E10,"来年")+COUNTIF(E7:E10,"来年 *") 見当違いであったらすみません。

harmoniodeon
質問者

補足

ありがとうございます! ただしく集計できたようです! 思いつきませんでした。。すばらしいです。 もし可能であれば「指定した範囲内から特定の文字列の出現回数を数える」方法を使って、集計する方法があれば知りたいので、 しばらく締め切らずに置かせていただきます。 指定した範囲内において、 「来年」の出現回数 - 「再」の出現回数 ができたら理想的です。 Microsoftのサイトに以下のようなものを見つけたのですが、 http://support.microsoft.com/kb/213889/ja この「例 1: テキスト範囲の出現する文字列の数をカウントします。」の例題が、その通りにならず、「#VALUE!」エラーが出てしまいます。 こうした方法が使えたらよかったのですが。。。 すみません。

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

別シートにコピー後、再来年を一意文字列(仮に再年)に編集→置換後に「今年」「来年」「再年」「未定」で計数する方法は駄目でしょうか。

harmoniodeon
質問者

補足

ありがとうございます。 その方法が可能であれば実行したいのですが(その方法であればやり方は解ります)、色々な制約があり、回答内容に手を加えずにやらなければならないのです。 また、このようなケースがこの設問だけではなく、また集計対象が膨大なため、手をかけずに集計できる方法があればと思いました。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.1

来と再を検索して来から再を引くのはダメでしょうか?

harmoniodeon
質問者

補足

ありがとうございます、まさにその方法を式で表したいのですが、これがなかなかできないのでございます。。。 おわかりになりますでしょうか?

関連するQ&A

専門家に質問してみよう