• ベストアンサー

エクセル関数で、「ある文字列が含まれるセルを数える」という式?

エクセルで、”好きな食べ物”という列があるのですが、ここからどんなものが人気か調べたいと思っています。 好きな食べ物 ------------- いちご イチゴ カレーライス カレー 卵 たまご 半角か、全角か、も統一されていませんし、漢字やひらがな、など表記がバラバラだったりします。省略した名前のものもあります。 でも、いちごが何件、カレーライスが何件、たまごが何件とトータルで知りたいと思っています。 例えば、 いちご・イチゴ・苺など条件をたくさん指定し、その文字が含まれていたら、カウントするというような関数であればいいのかな、と思っています。 助けて頂いてばかりなのですが、いいお答えばかりなので、すごく勉強になっています。是非今回も教えて頂ければと思っています。よろしくお願い致します。

noname#107402
noname#107402

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

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

ja7awu様へ、気を悪くしないでくださいね。 アイデア頂戴いたしました。m(__)m '標準モジュール登録 Option Compare Binary Function CountifPhonetic(セル範囲 As Range, _              検索語 As String, _              Optional WCard As Boolean = True, _              Optional TextBase As Boolean = False)  '引数:セル範囲:e.g.A1:A10, 検索語:"文字列",  'ワイルドカード:(省略可)標準あり eq. "*文字列*" Falseでなし,  'TextBase:(省略可)標準なし e.g. A≠a ,Trueで A =a  Dim DataArray() As Variant, DataTmp As String  Dim i As Long, j As Long, g As String, k As Long  Set Rng = セル範囲  kensaku = StrConv(検索語, 8)  If WCard Then g = "*"  For Each c In Rng   ReDim Preserve DataArray(i)   If TextBase Then    DataTmp = StrConv(Application.GetPhonetic(c.Value), 8)    DataArray(i) = StrConv(DataTmp, 2)    Else    If Not IsNumeric(c.Value) Then     DataArray(i) = StrConv(Application.GetPhonetic(c.Value), 8)     Else     DataArray(i) = c.Value    End If   End If   i = i + 1  Next c  For j = LBound(DataArray) To UBound(DataArray)   If DataArray(j) Like g & kensaku & g Then    k = k + 1   End If  Next j  CountifPhonetic = k End Function 使用例: ワイルドカードで、検索 =CountifPhonetic(A1:A10,"イチゴ") =CountifPhonetic(A1:A10,"?イチゴ",False) 野苺 のみにヒット =CountifPhonetic(A1:A10,"abc",,True) Abc aBc abc abc のみにヒット

noname#107402
質問者

お礼

ありがとうございます。 インターネットを通してより良いアイデアが出てくる、感動です!ありがとうございました。

その他の回答 (3)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

> いちご・イチゴ・苺など条件をたくさん指定し、その文字が含まれていたら、 > カウントするというような関数であればいいのかな、と思っています。 この3種類の「イチゴ」という読み方は、日本語IME等を使っていると取得できる ことですので、全ての品目を「読み」に直してしまうことをお勧めします。 文字種一定の「読み」を取得するには、次のユーザー定義関数を使用します。 ここでは、「半角カタカナの読み」に統一する GetPhoneNaro 関数を作ります。 これにより、あとは、CountIf 等の関数で容易に部分一致カウントが容易に出来ます。 GetPhoneNaro 関数の書式: =GetPhoneNaro(文字列式) 使用例: =GetPhoneNaro("苺")    ----> 半角カタカナのイチゴ =GetPhoneNaro("いちご")   ----> 〃 =GetPhoneNaro("イチゴ")   ----> 〃 =GetPhoneNaro("卵")    ----> 半角カタカナのタマゴ =GetPhoneNaro("タマゴ")   ----> 〃 セルA1に "林檎" が入力されているとき、 =GetPhoneNaro(A1)     ----> 半角カタカナのリンゴ その手順は、 1.Alt + F11 で VBE(Visual Basic Editor)を開きます。 2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。 3.コードウィンドウに下記コード(たった3行)をコピーして貼り付けます。 4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。 5.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を  「中」にして[OK]します。 これで、GetPhoneNaro 関数が使えます。 Function GetPhoneNaro(CelStr As String) As String  GetPhoneNaro = StrConv(Application.GetPhonetic(CelStr), vbNarrow) End Function

noname#107402
質問者

お礼

ありがとうございます。 気楽に考えていたのですが、すごくためになります。 ありがとうございました。

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

>カウントするというような関数であればいいのかな ユーザー定義関数を、ちょっと考えてみました。 '標準モジュール設定(Excel 2000以上) Function myCountIf(セル範囲 As Range, _           検索文字列 As String, _           Optional グローバル As Boolean = True) As Long  '引数の検索文字列が、複数の場合は、「,」で区切り、" "で括ること  'グローバルとは、*検索文字列* のワイルドカードのこと  '結果がいくつもあっても、セル1つで1つと数える  Dim Rng As Range, c As Range, strArg As String, aryArg As Variant  Dim g As String, flg As Boolean  Set Rng = セル範囲  strArg = 検索文字列  If グローバル Then g = "*"  If InStr(strArg, ",") > 0 Then   aryArg = Split(strArg, ",")  End If  If IsArray(aryArg) Then   For Each c In Rng    For Each s In aryArg     If WorksheetFunction.CountIf(c, g & s & g) > 0 Then      flg = True     End If     Next s     If flg Then k = k + 1: flg = False    Next c    Else    k = WorksheetFunction.CountIf(Rng, g & strArg & g)   End If   myCountIf = k End Function 使用例: =myCountif(セル範囲,"いちご,イチゴ,苺")

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

ベタな方法ですけど =COUNTIF(セル範囲,"*いちご*")+COUNTIF(セル範囲,"*イチゴ*")+COUNTIF(セル範囲,"*苺*") とするとか ユーザー定義関数を作ればすっきりと記述できるけど

noname#107402
質問者

お礼

ありがとうございます。 こういった方法が分かり易く、自分にとってはすごく為になります。ありがとうございます。

関連するQ&A

  • エクセル 関数で全角カタカナを半角にしたい

    エクセル初心者です。人からもらったデータなのですが、住所の記載でカタカナの部分に半角と全角が混ざってしまっています。漢字・ひらがなはすべて全角、カタカナ・数字は半角に統一したいのですが、関数でできますか? 良い方法を教えてください。

  • エクセルシートの文字列加工について

    エクセルのシートのA列に"全角ひらがな漢字"の文字列と"半角英数"の文字列を含むセルが縦に並んでいます。約200行。 ■この中から、"全角ひらがな漢字"の文字列を右となりのB列に、"半角英数"の文字列をさらに右となりのC列に、それぞれコピーしたいのですが、関数・マクロなどでいい方法がありましたら教えて下さい。 ■それから、半角英数文字列のC列から、""で囲まれた文字列のみをさらにD列にコピーしたいのです。 文字列の長さが統一されていれば、比較的簡単なのですが、今回は文字列の長さが不規則です。よろしくお願いします。

  • EXCEL 「ASC」関数  英数字の全角を半角に変換するよい方法があれば教えてください

    EXCELで入力しているデータをフィルターを使用して検索できる データベースにしたいのですが、以前からの入力しているデータの英数字が全角、半角が混在していてます。 フィルター検索の際に全角で入力すると半角入力のものがヒットしないので不便で、英数字の半角統一にしたいと考えています。 ASC関数を使用して英数字の全角→半角を行なうこと考えたのですが ASC関数ですとカタカタも半角カタカナに変換されるので 英数字だけを全角→半角にする関数や方法などあれば教えてください。 入力データは 漢字、ひらがな、カタカナ、英数字が混在しています。 希望 全角→漢字、ひらがな、カタカナ 半角→英数字 宜しくお願い致します。

  • excelで数字を全角から半角にしたい

    excelでA1からZ400までデータがあります。漢字やひらがな、カタカナ、数字、アルファベットなどがたくさんあります。数字が全角と半角がごちゃ混ぜ状態です。どうにかして数字を半角で統一できないでしょうか?具体的には「東1」「東1」がごっちゃになってますので、数字が半角の「東1」に統一したいです。よろしくお願いします。

  • エクセルの文字で数種類の文字を変換出来る関数などの方法を教えて下さい。

    エクセルのセル内の文字変換の関数など、方法を教えて下さい。 現状一つの列に対して、約12000行(12000件分)「500×500×500」などの立方体を表す入力をしているのですが。 この入力を複数の人間で数年間かけて行ったため、「×」(かける)の表記が色々となってしまっており、これを1種類の表記にまとめたいのですが。 現状のこの「×」(かける)表記が確認出来ているだけで、 「*」(アスタリスク) 「X」(エックス大文字半角) 「X」(エックス大文字全角) 「x・x」(エックス小文字全角・半角) 「X・ⅹ」(ローマ数字10表記2種) 「χ」(記号?不明) などが使用されております。 中には「500*500×500」という一つの表記の中に2種類使用してしまっている場合もあります。 今回これらを一つの表記方法で、統一したく皆様にお願いさせていただきます。 エクセルレベルの高くない者ですが、何卒宜しくお願い致します。

  • 海外購入PCでLENB関数を機能させるには?

    掲題の件ですがお力を貸していただけますと幸いです。 LENBを使って文字数をカウントしたいのですが、 海外購入パソコンのため全角認識がないのか、 ひらがなや漢字をいれても`1`とカウントしてしまいます。 きちんと半角は1、全角は2としてカウントさせたいのですが 何かいい方法はないでしょうか? このエクセルファイルは人に提出して記入してもらうもののため (提出先の人も海外購入パソコンを使用している可能性大) PCのハード側をいじるのではなく、 エクセル内の関数などで解決したいです。。。 どうぞよろしくお願いいたします。

  • Excelで2バイト文字の前に半角スペース一括挿入

    いつもありがとうございます。 A列に下記のような 「半角英数」+「漢字(orひらがな・全角記号)」のデータが数百個あります。 abc漢字あああ 2zzあああ qrs5s~(ああ) 以下省略 半角英数と全角文字の間に半角スペースを一括挿入したいのですが、 どのようにすれば可能でしょうか。 (例えば "abc漢字あああ" を "abc 漢字あああ" に変換 "2zzあああ"   を "2zz あああ" に変換 "qrs5s~(ああ)" を "qrs5s ~(ああ)" ※"~"の前に半角スペース に変換) お知恵拝借できれば幸いですm(_ _)m

  • 記事に登録できない文字列

    Yahoo!でブログを書いているのですが、全角の漢字、ひらがな、かたかな、あとは「。」、「、」、かっこ類、全角および半角の数字やアルファベットしか使っていないのに、「記事に登録できない文字列が含まれています」といわれてしまいます。 記号類でも連続では一切使いません。本当の文章だけしか書いていません。 これは一体どういうことでしょうか?

  • 文字変換が変です。

    ローマ字入力でひらがなは出ます。 それを漢字に変換はできるのでこのような文章は打てるのですが 半角/全角を押すと‘ が出ます。 また半角/全角を押してもタスクバーがアルファベットに切り替わらず あ の表記のままです。 緑のAltを押しながら半角/全角を押すとタスクバーの表記は Aになります。 タスクバーが あ になっている時に =の印のあるところを押すとーが出ます。 その横のへを押すと=になってしまいます。 どうしてこうなったのかわからないのですが もとのような入力の仕様に戻すには どのようにしたらよろしいでしょうか? ローマ字入力の際、今まで小文字で入っていたのが 大文字入力にもなっています。 よろしくお願いいたします。 わかりにくくてすみません。

  • Excelで文字の長さを揃えるには

    excel95とExcel2000を使っています。 漢字やひらがな全角カタカナ全角英数字は2バイト、 半角カタカナ英数字は1バイト、 2バイトと1バイトの混在入力して20バイトの長さの文字列を比べると見た目の長さが違う。 同じ20バイトの文字列を見た目を揃える方法を教えてください。

専門家に質問してみよう