質問: 完全一致する単体の文字列のみ、別シートにある各行・各列指定のキーワードで置換したい 類似の質問もさせていただいていたのですが。 今回は「完全一致する場合」のみ、文字列を変えたいのです。 例えばSheet1のG列に、この質問 の時と似たような状況で、 りんご りんご ジョナゴールド りんご ふじ りんご 紅花 ・ ・ ・ ・ 牛肉 牛肉 山形牛 牛肉 松坂牛 ・ ・ ・ お米 お米 コシヒカリ お米 ササニシキ ・ ・ ・ というデータが入ってるとします。 そしてSheet2で、「りんご」「牛肉」「お米」を各行に並べ、置換するためのキーワードを列に書き出し、実際に置換する方法を教えていただきました。 今回は「単体の文字列のみを置換」したいのです。 上記の例でいいますと「りんご」「牛肉」「お米」という、単体の文字列のみです。
回答: 完全一致のセルが連続する場合のみを置換対象とするのであれば、 オートフィルタの指定を下記のように変更するだけで大丈夫です。 ``` 'オートフィルタ実行 ' .AutoFilter Field:=1, Criteria1:="=*" & sKeyword & "*" .AutoFilter Field:=1, Criteria1:=sKeyword ``` > りんご > りんご ジョナゴールド > りんご ふじ > りんご 紅花 > > の先頭の「りんご」のような 完全一致のセルが単独で存在する場合も置換対象とするのであれば、 上記の変更に加え、置換処理部のIf、Else部を下記のようにコメント化、および修正して下さい。 (2018/04/24 09:00一部修正) ``` ' '2行以上連続していたら置換 ' If lEndRow > lBeginRow Then With wsTarget '置換 ' .Range(.Cells(lBeginRow, TARGET_COL), .Cells(lEndRow, TARGET_COL)).Replace What:=sMainKeywords, Replacement:=sReplaceWords(lReplaceIndex), LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False .Range(.Cells(lBeginRow, TARGET_COL), .Cells(lEndRow, TARGET_COL)).Value = sReplaceWords(lReplaceIndex) End With lTargetIndex = lTargetIndex + lTargetCount lReplaceIndex = lReplaceIndex + 1 ' Else ' lTargetIndex = lTargetIndex + 1 ' End If ```