文字列からFIND関数で位置を取り出すときに検索文字が複数ある場合、演算式が複雑になってしまいます。この関数を使うことで文字を10個まで指定して最小の位置を求めることができます。
VBEの標準モジュールに下のコードを登録して「Excelマクロ有効フォーム」で保存してください。
関数の登録方法は⇒♯000 ユーザー定義関数を登録する方法
登録されたら、シート上からユーザー関数「 FindS 」が使用できます。
使い方は
ワークシート上で = FindS(文字列,検索文字1,[検索文字2],[検索文字3]以下10まで) の関数として使用することで、 複数の特定の文字列の中で最小の位置を抽出できます。
【例】
複数の検索文字の内最初に表示された位置を調べる関数
FindS(文字列,検索文字1,[検索文字2],[検索文字3]以下10まで)
FindS(“秋田県秋田市新屋”,”県”,”市”)→ 3
県の位置は3、市の位置は6なので3
Function FindS(S As String, W1 As String, Optional W2 As String, _
Optional W3 As String, Optional W4 As String, Optional W5 As String, _
Optional W6 As String, Optional W7 As String, Optional W8 As String, _
Optional W9 As String, Optional W10 As String)
’ Find関数で複数の検索文字の内最初に表示された位置を調べる関数
’ FindS(文字列,検索文字1,[検索文字2],[検索文字3]以下10まで)
’ FindS(“秋田県秋田市新屋”,”県”,”市”)→ 3
’ 県の位置は3、市の位置は6なので3
Dim i As Long
Dim W(1 To 10) As Variant
Dim WL(1 To 10) As Long
Dim P As Long
On Error GoTo EXITFUN
W(1) = W1
W(2) = W2
W(3) = W3
W(4) = W4
W(5) = W5
W(6) = W6
W(7) = W7
W(8) = W8
W(9) = W9
W(10) = W10
For i = 1 To 10
If W(i) <> “” Then
WL(i) = InStr(S, W(i))
End If
Next
For i = 1 To 10
If WL(i) <> 0 Then
If P > WL(i) Or P = 0 Then
P = WL(i)
End If
End If
Next
If P = 0 Then
GoTo EXITFUN
End If
FindS = P
Exit Function
EXITFUN:
FindS = CVErr(xlErrValue)
End Function
ここで紹介したコード使用による損害に対しては一切責任は負えません。