Excel VBA:文字列の一部を置き換える

Excel VBAで文字列の指定した一部の文字を、指定した別の文字に置き換えます。



Homeに戻る > Excel 数値・文字列・検索・印刷のTipsへ

Excelには文字の置き換えを行うReplace関数がありますが、ここではReplace関数を使用せずに、独自のプロシージャを作成します。

Replace関数ではできない場合に、このような方法があることを知っていると役立つかと思います。

ExReplaceStrプロシージャを作成しました。

構文:ExReplaceStr(src As String, fnd As String, repl As String)

引数は下記になります。

  • src:元の文字列
  • fnd:置き換え前の文字列
  • repl:置き換える文字列

関連する「Replace関数で複数文字列の置換が可能かテストする」も掲載しています参照してください。



Excel VBA コードの解説

■ ExReplaceStrプロシージャ

  1. 変数startposに検索開始位置の1を格納します。
  2. Instr関数で、置き換え前の文字列を検索し見つかった位置を取得します。
  3. Doループで見つからなくなるまで繰り返し置き換えます。
  4. Left関数で、検索位置から前の文字を取得します。
  5. Right関数で、検索位置から後の文字を取得します。
  6. 取得した文字と置き換える文字を連結します、これで1個目が置き換わりました。
  7. 次の位置からInstr関数で検索します。
  8. これを繰り返し見つからなければループを抜けます。

■ コマンドボタンのクリックイベント


Option Explicit

'Excel VBAで文字列の置き換え
'src: 元の文字
'fnd: 置き換え前の文字
'repl: 置き換える文字
Public Sub ExReplaceStr(src As String, fnd As String, repl As String)
    Dim delpos As Long
    Dim startpos As Long
    Dim before As String
    Dim after As String
    
    '検索開始位置
    startpos = 1
    '開始の検索結果位置
    delpos = InStr(startpos, src, fnd)

    Do Until delpos = 0
        '検索位置から前の文字
        before = Left(src, delpos - 1)
        '検索位置から後の文字
        after = Right(src, (Len(src) - (delpos + Len(fnd) - 1)))
        '置き換え後の文字
        src = before & repl & after
        '次の位置から繰り返す
        startpos = Len(before) + Len(repl) + 1
        delpos = InStr(startpos, src, fnd)
    Loop
End Sub

Private Sub CommandButton1_Click()
    Dim s1 As String
    
    '置き換え前の文字
    s1 = "あいうえおおまかせかきくけこ"
    Range("B9") = s1
    '文字列の置き換え
    ExReplaceStr s1, "おまかせ", "食べる"
    '置き換え結果の表示
    Range("B10") = s1
End Sub




実行結果のExcelシート

コマンドボタンをクリックすると、B9に置き換え前の文字、B10に置き換え後の文字が表示されます。

「おまかせ」が「食べる」に置き換わっているのが分ります。

実行結果のExcelシート


Homeに戻る > Excel 数値・文字列・検索・印刷のTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved