F036 範囲内の文字の使用位置を絶対参照で求める関数

2019-05-27
EXCEL自作関数

 指定した文字が 選択した範囲内のどの位置に使われているか調べる関数です。 選択した範囲内で指定した文字が使われている場所をシート名、シート内のR(行)C(列)を順番に表示していきます。

VBEの標準モジュールに下のコードを登録して「Excelマクロ有効フォーム」で保存してください。
関数の登録方法は⇒♯000 ユーザー定義関数を登録する方法

登録されたら、シート上からユーザー関数「 SearchWordA 」が使用できます。
使い方は 
ワークシート上で = SearchWordA ( 範囲, 検索する文字列) の関数として使用できます、範囲内から検索する文字列の位置を取得できます。

【例】
SearchWordA(範囲, 検索する文字列)
セルF8 東京、 セルI8 東京 、 セルG10 東京都港区
=searchwordA(E6:J15,”東京”) ⇒ R8C6,R8C9,R10C7
範囲内から検索する文字列の位置を取得する関数。
選択範囲内で、検索する文字の場所のシート名とシート内の
位置R(行)、C(列)を表示します。

Function SearchWordA(R As Range, W As String)
‘範囲内から検索する文字列の位置を取得する関数。
‘選択範囲内で、検索する文字の場所のシート名とシート内の
‘位置R(行)、C(列)を表示します。
‘SearchWordA(範囲, 検索する文字列)
Dim R2 As String
Dim RS As String
Dim RE As String
Dim AD As String
Dim Book As String
Dim Sheet As String
Dim SR As Long
Dim SC As Long
Dim ER As Long
Dim EC As Long
Dim A As Variant
Dim i1 As Long
Dim i2 As Long
Dim N As Long
Dim P As String
On Error GoTo EXITFUN
R2 = R.Address(ReferenceStyle:=xlR1C1)
AD = R.Address(External:=True)

If Mid(AD, 3, InStr(AD, “]”) – 3) <> ActiveWorkbook.Name Then
 Book = “[” & Mid(AD, 3, InStr(AD, “]”) – 3) & “]”
End If

If Mid(AD, InStr(AD, “]”) + 1, InStr(AD, “!”) – _
(InStr(AD, “]”) + 1) – 1) <> ActiveSheet.Name Then
  Sheet = Mid(AD, InStr(AD, “]”) + 1, InStr(AD, “!”) – _
 (InStr(AD, “]”) + 1) – 1) & “!”
End If

If InStr(R2, “:”) = 0 Then
  RS = R2
Else
 RS = Mid(R2, 1, InStr(R2, “:”) – 1)
 RE = Mid(R2, InStr(R2, “:”) + 1)
End If

If InStr(RS, “R”) > 0 And InStr(RS, “C”) > 0 Then
  SR = Mid(RS, InStr(RS, “R”) + 1, InStr(RS, “C”) – _
 InStr(RS, “R”) – 1)
ElseIf InStr(RS, “R”) > 0 And InStr(RS, “C”) = 0 Then
 SR = Mid(RS, InStr(RS, “R”) + 1)
Else
 SR = 1
End If

If InStr(RS, “C”) > 0 Then
  SC = Mid(RS, InStr(RS, “C”) + 1)
Else
 SC = 1
End If

If RE = “” Then
  ER = 1048576
 EC = 16384
End If

If InStr(RE, “R”) > 0 And InStr(RE, “C”) > 0 Then
  ER = Mid(RE, InStr(RE, “R”) + 1, InStr(RE, “C”) – _
 InStr(RE, “R”) – 1)
ElseIf InStr(RS, “R”) > 0 And InStr(RS, “C”) = 0 Then
 ER = Mid(RS, InStr(RS, “R”) + 1)
Else
 ER = 1
End If

If InStr(RE, “C”) > 0 Then
  EC = Mid(RE, InStr(RE, “C”) + 1)
Else
 EC = 1
End If

A = R
For i1 = LBound(A, 1) To UBound(A, 1)
 For i2 = LBound(A, 2) To UBound(A, 2)
  If InStr(A(i1, i2), W) > 0 Then
   If P = “” Then
    P = Book & Sheet & “R” & i1 + SR – 1 & _
    ”C” & i2 + SC – 1
   Else
    P = P & “,” & Book & Sheet & “R” & i1 + _
    SR – 1 & “C” & i2 + SC – 1
   End If
  End If
 Next
Next
SearchWordA = P
Exit Function
EXITFUN:
SearchWordA = “”
End Function

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