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

お世話になります。

VBAの文字列の置換で教えてください。
replaceを使用したときに、置換対象の文字がなかったら、
「元の値をそのまま返す」という形なのですが、
置換対象がなかったときは、その旨わかるようにしたいのですが、
方法あるでしょうか?
※毎回replaceの前でfind関数であるかないか、調べないと
いけないのでしょうか?

何卒宜しくお願いします。

A 回答 (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
    • good
    • 0

>※毎回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
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A