F047 文字列内に2つ以上含まれる文字の2回目以降の位置を調べる関数

2019-05-29
EXCEL自作関数

 FIND関数では抽出するのが難しい、 文字列内に2つ以上含まれる文字の2回目以降の位置を調べることができます。
 この関数では表示された回数も指定して文字数内の位置を抽出できます 。
VBEの標準モジュールに下のコードを登録して「Excelマクロ有効フォーム」で保存してください。
関数の登録方法は⇒♯000 ユーザー定義関数を登録する方法

登録されたら、シート上からユーザー関数「 FindN」が使用できます。
使い方は 
ワークシート上で = FindN(検索文字,文字列,[文字が表示された回数]) の関数として使用することで、 特定の文字列からより後の指定した文字数の文字を抽出できます。

【例】
FindN(検索文字,文字列,[文字が表示された回数])
FindN(“秋田県秋田市新屋”,”秋田”,2)→ 4
2回目の秋田が表示表示される位置なので4

Function FindN(S1 As String, S2 As String, Optional N As Long = 1)
’ FindN(検索文字,文字列,[文字が表示された回数])
’ FindN(“秋田県秋田市新屋”,”秋田”,2)→ 4
’ 2回目の秋田が表示表示される位置なので4
Dim i As Long
Dim C As Long
Dim CW As Long
Dim A As String
On Error GoTo EXITFUN
A = S2
CW = (LenB(S2)- LenB(Replace(S2, S1, “”))) / LenB(S1)
C = 0
If N > CW Then
 GoTo EXITFUN
End If

For i = 1 To N
  If InStr(A, S1) > 0 Then
  C = C + InStr(A, S1)
  A = Mid(A, InStr(A, S1) + 1)
 Else
  GoTo EXITFUN
 End If
Next
FindN = C
Exit Function
EXITFUN:
FindN = CVErr(xlErrValue)
End Function

ここで紹介したコード使用による損害に対しては一切責任は負えません。