office.notes@misora05

本館ブログのうち,Office・Windwsがらみのネタ+@を抜き出したもの.月水金更新予定.

文字列中に特定の文字列がいくつ含まれているかを数える関数@Excel/VBA

「文字列の中に特定の文字列がいくつ含まれるかを数えたい」

これ,ExcelでもVBAでも割と聞かれる事柄なのですが,いずれもこれを直接求める関数などはないので,確かに「?」となりやすいところなのかもしれません.
ということで,Excel関数版とVBA版をそれぞれやってみましょう.

Excel関数編

まずは結論から.こうなります.

順を追って説明すると,

  1. 文字列全体の長さを求める.
  2. この文字列から,いくつ含まれているかを数えたい文字列を取り除いた場合の文字列の長さを求める.
  3. 1 から 2 を減じた値を求める.
  4. 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で渡された文字列がいくつ含まれるか.

を求めているものとします.

Surface Pro 4