- ベストアンサー
VBA 置換文字がみつからない時
お世話になります。 VBAの文字列の置換で教えてください。 replaceを使用したときに、置換対象の文字がなかったら、 「元の値をそのまま返す」という形なのですが、 置換対象がなかったときは、その旨わかるようにしたいのですが、 方法あるでしょうか? ※毎回replaceの前でfind関数であるかないか、調べないと いけないのでしょうか? 何卒宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんいちは。 > 置換対象がなかったときは、その旨わかるようにしたいのですが、 > 方法あるでしょうか? > ※毎回replaceの前でfind関数であるかないか、調べないと > いけないのでしょうか? 何れにしても、条件分岐は必要な訳ですから、 なるべく簡単に片付けるとして、Instr()関数を使うのが標準的です。 また、見つからないワードを置換するのも無駄ではあるので、 特に"置換対象がなかったとき"を判別する必要がない場合でも、 Replace()関数はなるべくInstr()関数とセットで使うようにすると 効率的です。 Sub Re8335191() Dim s0 As String Dim sTgt As String Dim sRtn As String s0 = "abc" sTgt = "a" If InStr(s0, sTgt) > 0 Then sRtn = Replace(s0, sTgt, UCase(sTgt)) MsgBox s0 & " → " & sRtn Else MsgBox "notfound : " & sTgt End If sTgt = "d" If InStr(s0, sTgt) > 0 Then sRtn = Replace(s0, sTgt, UCase(sTgt)) MsgBox s0 & " → " & sRtn Else MsgBox "notfound : " & sTgt End If End Sub
その他の回答 (1)
- mshr1962
- ベストアンサー率39% (7417/18945)
>※毎回replaceの前でfind関数であるかないか、調べないといけないのでしょうか? VBAでならFind関数でなく、StrComp関数ですね。 あと変数を使えば比較は前でも後でも出来ます。 問題は、どう知らせるかですね。 例 Dim MAE,ATO As String MAE = Cell(1,1) ATO = Replace(MAE, "A", "B") IF MAE = ATO Then MsgBox("対象文字がありません",VbOkOnly,"置換") Cell(1,1) = ATO