[[20210825102710]] 『文字列置換で同じ文字を返したい』(佐々木) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字列置換で同じ文字を返したい』(佐々木)

お世話になります。ネットから見つけた文字列置換のマクロですが、
11行目〜12行目のように同じ文字列を置換しようとすると2〜3行目のようになってしまいます。どのように修正すればよいでしょうか?

     A列          B列
1行目  りんご        りんご1
2行目  りんごA        りんごA
3行目  りんごA、リンゴ    りんご1A、リンゴ1
           ・
           ・
           ・
         置換文字列
11行目  りんご        りんご1
12行目  りんごA        りんご1

Option Explicit

Function MultipleSubstitute(str As String, ruleList As Range)

    ' 変換ルールの行数繰り返す
    Dim rowIndex As Integer ' 変換ルールのループカウンター
    For rowIndex = 1 To ruleList.Rows.Count
        Dim strSrc As String ' 検索文字列
        Dim strTarget As String ' 置換文字列

        strSrc = ruleList.Cells(rowIndex, 1) ' 検索文字列を取得
        strTarget = ruleList.Cells(rowIndex, 2) ' 置換文字列を取得

        str = Replace(str, strSrc, strTarget) ' 文字列置換を実行
    Next

    MultipleSubstitute = str ' 置換結果をセルに表示
End Function

 

B1= MultipleSubstitute(A1,$A$11:$B$12)

< 使用 Excel:Excel2019、使用 OS:Windows10 >


https://blog-tips.sekenkodqx.jp/2019/08/08/excel-vba-multiplesubstitute00001/
 ここの物のようだが記事のコメントでの質問を受け付けているようなのでまずは
 そちらに質問してみては?
(ねむねむ) 2021/08/25(水) 11:16

 あんま関係ない事でアレなんですが、
 気持ち的には、とりあえず引数[str]の手前に[ByVal]付けて欲しい。(落ち着かないデス)

(白茶) 2021/08/25(水) 11:28


 >2〜3行目のようになってしまいます
 このユーザー定義関数ではそれが正しい動作です。
 逆にどうなってほしいのか書かないとどう修正していいかわかりません。

 置換のリストは上から順に処理されるので、置換する順番も重要です。

 検索リストを
 りんごA       ●
 りんご	       ●
 ●	    りんご1

 みたいにいったん絶対使われてない文字に置換して、最後に再度置換するという工夫をしたらどうでしょう
(´・ω・`) 2021/08/25(水) 11:59

みなさまコメントありがとうございます。

掲載サイトに質問して、とりあえず今は最後に再度手動で置換する方法でやってみます。
(佐々木) 2021/08/25(水) 14:19


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.