F104 SUBSTITUTEで後ろから〇番目の文字を置き換える関数

EXCEL自作関数

Excel自作 VBA 関数 

文字列中の特定の文字を新しい文字列に置き換えするSUBSTITUTE関数を文字列の後ろから行えるようにした関数です。
この関数を使えば後ろから2番目の検索文字を新しい文字に置換することなどが可能です。

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

登録されたら、シート上からユーザー関数「 SUBSTITUTER」が使用できます。
使い方は 
ワークシート上で = SUBSTITUTER(文字列,検索文字,置換文字, [置換位置]) の関数として使用することで、 SUBSTITUTE関数を文字列の後ろから行えるようにできます。

SUBSTITUTER(文字列,検索文字,置換文字, [置換位置])
SUBSTITUTE関数で後ろから〇番目の文字を置き換える関数

置換位置は後からの何番目の置換文字を置き換えるかを数値で指定します。省略すると一番後ろの文字が置換されます。
置換位置は後ろからの検索文字が現れた回数となります
[例]
SUBSTITUTER(“秋田県秋田市秋田町”,”秋田”,”栃木”,2)→”秋田県栃木市秋田町”
SUBSTITUTER(“秋田県秋田市秋田町”,”秋田”,”栃木”,1)→”秋田県秋田市栃木町”
SUBSTITUTER(“秋田県秋田市秋田町”,”秋田”,”栃木”)→”秋田県秋田市栃木町”

Function SUBSTITUTER(S1 As String, S2 As String, S3 As String, Optional N As Long = 1)
'SUBSTITUTE関数で後ろから〇番目の文字を置き換える関数
'SUBSTITUTER(文字列,検索文字,置換文字,  [置換位置])
'置換位置は後からの何番目の置換文字を置き換えるかを数値で指定します。
'省略すると一番後ろの文字が置換されます。
'SUBSTITUTER("秋田県秋田市秋田町","秋田","栃木",2)→"秋田県栃木市秋田町"
'SUBSTITUTER("秋田県秋田市秋田町","秋田","栃木",1)→"秋田県秋田市栃木町"
'SUBSTITUTER("秋田県秋田市秋田町","秋田","栃木")→"秋田県秋田市栃木町"

Dim i As Long
Dim C As Long
Dim CW As Long
Dim A As String
On Error GoTo EXITFUN
A = S1
CW = (LenB(S1) - LenB(Replace(S1, S2, ""))) / LenB(S2)
C = 0
If N = 0 Or N > CW Then
  GoTo EXITFUN
Else
  N = CW + 1 - N
End If


For i = 1 To N
   If InStr(A, S2) > 0 Then
    C = C + InStr(A, S2)
    A = Mid(A, InStr(A, S2) + 1)
  Else
    GoTo EXITFUN
  End If
Next
SUBSTITUTER = C

SUBSTITUTER = Left(S1, C - 1) & Replace(S1, S2, S3, C, 1)

Exit Function
EXITFUN:
SUBSTITUTER = CVErr(xlErrValue)
End Function

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