エクセルで、”好きな食べ物”という列があるのですが、ここからどんなものが人気か調べたいと思っています。
好きな食べ物
-------------
いちご
イチゴ
カレーライス
カレー
卵
たまご
半角か、全角か、も統一されていませんし、漢字やひらがな、など表記がバラバラだったりします。省略した名前のものもあります。
でも、いちごが何件、カレーライスが何件、たまごが何件とトータルで知りたいと思っています。
例えば、
いちご・イチゴ・苺など条件をたくさん指定し、その文字が含まれていたら、カウントするというような関数であればいいのかな、と思っています。
助けて頂いてばかりなのですが、いいお答えばかりなので、すごく勉強になっています。是非今回も教えて頂ければと思っています。よろしくお願い致します。
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 のみにヒット
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
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(セル範囲,"いちご,イチゴ,苺")
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- マウス・キーボード macからリモートデスクトップでwindowsに接続した際のキーボード配列 3 2023/07/10 08:40
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Excel(エクセル) 【Excel質問】 「本日の日付」から指定条件を満たす営業日経過後の日数を表示させる関数式 3 2022/06/06 23:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
7文字以上のフルーツをできるだ...
-
教えてください!!
-
ハーブソルトを代用できるもの...
-
中黒「・」か読点「、」か?
-
スポンジケーキってどのくらい...
-
Excel MATCH関数で検索範囲内...
-
Excelでの全通りの組み合わせ出...
-
エクセルで数字を入力したら文...
-
筍の上の部分が緑色になってい...
-
いちごを1パック買ったのです...
-
職場で隣の人についてです。飲...
-
スーパーで買った1つ300円の梨...
-
梶井基次郎の檸檬
-
Excelの関数 SUBSTITUTEとIF関...
-
さくらんぼから何かの幼虫が…
-
EXCELでB1に指定文字が入った場...
-
しらたきと吐き気
-
さくらんぼに似ているが、さく...
-
りんごの皮農薬大丈夫?洗わず...
-
「○○って」と「○○て」 書き言...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えてください!!
-
7文字以上のフルーツをできるだ...
-
筍の上の部分が緑色になってい...
-
ハーブソルトを代用できるもの...
-
中黒「・」か読点「、」か?
-
10年前のにんにく漬け、食べて...
-
スポンジケーキってどのくらい...
-
Excel MATCH関数で検索範囲内...
-
Excelでの全通りの組み合わせ出...
-
いちごを1パック買ったのです...
-
職場で隣の人についてです。飲...
-
エクセルで数字を入力したら文...
-
Excelの関数 SUBSTITUTEとIF関...
-
しらたきと吐き気
-
煮物こんにゃくの冷凍保存について
-
スーパーで買った1つ300円の梨...
-
「であり」と「であって」の使...
-
エクセル 同名の場合はB列にC...
-
大至急!妊娠初期でイチゴにつ...
-
北海道では、見かけないもの
おすすめ情報