dポイントプレゼントキャンペーン実施中!

「突合用シート」にて、
Columns("A:A").Select で、A列にて、

Selection.Replace で、ある文字列を置換しています。置換のパターンが8種類あるので8行繰り返して記述しています。

別のシート「加工用シート」でも同じ置換作業を行う必要が出てきました。
こちらではD列にて行う必要があります。(置換ルールは同じ)
すると、「突合用シート」で8種類の置換が終わった後、
「加工用シート」に移動して Columns("D:D").Select で、
同じ条件を記述しなおして置換しなければいけないのでしょうか?
これだと条件が修正になった時、2か所修正する必要があります。

また、置換文は、以下の書き方ですが、もっと上手な書き方はありますか?
「置換前」の文字列を「置換後」に置き換えたいだけです。

Selection.Replace What:="置換前", Replacement:="置換後", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2

詳しい方、よろしくお願いいたします。

A 回答 (3件)

こんにちは


>これだと条件が修正になった時、2か所修正する必要があります。
難しい問題です、、、
同じ条件の修正が約束されていればそのようになりますが、個々の修正が必要な場合、纏めてあると結局、増やす必要があるのではないかと、、
Replaceは主に加工に使用されると思いますのでいらぬ心配かも知れませんね

書き方は色々ありそうですが、少し纏める事が出来そうです。
処理速度を考えていませんが、、例として

Sub Sample()
Dim 突合用シート As Worksheet, 加工用シート As Worksheet
Dim 加工用シート As Worksheet
Dim trgRange As Range
Set 突合用シート = Worksheets("突合用シート")
Set 加工用シート = Worksheet("加工用シート")

Set trgRange = 突合用シート.Range("A2", 突合用シート.Cells(Rows.Count, "A").End(xlUp))
Call MyReplace(trgRange)
Set trgRange = 加工用シート.Range("D2", 加工用シート.Cells(Rows.Count, "D").End(xlUp))
Call MyReplace(trgRange)
End Sub

Sub MyReplace(trgRange As Range)
Dim ReplAry, strWhat, i As Integer
ReplAry = Array("置換後1", "置換後2", "置換後3", "置換後4", "置換後5", "置換後6", "置換後7", "置換後8")
For Each strWhat In Array("置換前1", "置換前2", "置換前3", "置換前4", "置換前5", "置換前6", "置換前7", "置換前8")
trgRange.Replace What:=strWhat, Replacement:=ReplAry(i), LookAt:=xlPart
i = i + 1
Next
End Sub

置換前1と置換後1は対の関係です。
パラメータ(引数)を省略しています。
xlPartもデフォルトですが念のため。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
    • good
    • 1
この回答へのお礼

タイプミス、問題ありません(笑
期待通りの動作確認ができました。
すごく短くすっきりしたソースになり内部的にも満足です。
ありがとうございます。

お礼日時:2021/07/07 10:57

#2です


タイプミスと重複訂正
Dim 加工用シート As Worksheet 不要
誤り
Set 加工用シート = Worksheet("加工用シート")
訂正
Set 加工用シート = Worksheets("加工用シート")

すみません。
    • good
    • 0

統合用シートで置換を行っているプロシージャをSub1とします。


加工用シートで置換を行っているプロシージャ:Sub2を新たに作成します。

新たにSub0を作成し、そこからSub1,Sub2を呼び出せばOKです。


Public Sub Sub0()
Call Sub1
Call Sub2
End Sub

Public Sub Sub1()
'突合用シート処理
End Sub

Public Sub Sub2()
'加工用シート処理
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
つまり、
 Sub1()
 Sub2()
両方に置換条件の同じ記述が必要って事ですよね?
置換文字の条件が全く同じなので重複しないやり方はないのかな、
と思ったしだいです。

お礼日時:2021/07/06 17:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!