文字列中に特定の文字列がいくつ含まれているかを数える関数@Excel/VBA
「文字列の中に特定の文字列がいくつ含まれるかを数えたい」
これ,ExcelでもVBAでも割と聞かれる事柄なのですが,いずれもこれを直接求める関数などはないので,確かに「?」となりやすいところなのかもしれません.
ということで,Excel関数版とVBA版をそれぞれやってみましょう.
Excel関数編
まずは結論から.こうなります.
順を追って説明すると,
- 文字列全体の長さを求める.
- この文字列から,いくつ含まれているかを数えたい文字列を取り除いた場合の文字列の長さを求める.
- 1 から 2 を減じた値を求める.
- 3 で求めた値を,いくつ含まれているかを数えたい文字列の長さで除する.
関数で表すと,
=(LEN(A1)-LEN(SUBSTITUTE(A1,B1,"")))/LEN(B1)
意外と短くて済みます.なお,ここでは
- A1セルに記述された文字列の中に,
- B1セルに記述された文字列がいくつ含まれるか.
を求めているものとします.
VBA編
まずはコードから.
Public Function Count_String(ByVal str1 As String _ , ByVal str2 As String) As Long Count_String = (Len(str1) - Len(Replace(str1, str2, ""))) / Len(str2) End Function
説明は省略でいいですね.これも,Excel関数の場合と全く同じ方法です.一応,
- 第一引数
str1
で渡された文字列の中に, - 第二引数
str2
で渡された文字列がいくつ含まれるか.
を求めているものとします.