VBAのReplaceメソッドで完全一致で置換する方法

このQ&Aのポイント
  • VBAのReplaceメソッドを使って完全一致で置換する方法を教えてください。
  • Excel.Range.Replaceメソッドではなく、VBA.Strings.Replaceメソッドを使って置換を行いたい場合、置換対象と置換前文字が一致する(完全一致)場合のみ置換されるようにする方法を教えてください。
  • Excel.Range.Replaceメソッドとは異なり、VBA.Strings.ReplaceメソッドではLookAtのような条件を指定することはできないため、完全一致で置換するには別の方法が必要です。どのような方法があるでしょうか?
回答を見る
  • ベストアンサー

Replaceメソッド 完全一致で置換したい

VBAのReplaceメソッドを完全一致で使う方法はありますか? Excel.Range.Replaceメソッドの方ではなく、 VBA.Strings.Replaceメソッドの方なのですが、 Sub test12() MsgBox Replace("abc", "ab", "") '・・・(1) MsgBox Replace("ab", "ab", "") '・・・(2) End Sub (1)の場合は、置換対象と置換前文字が一致しないから、置換されたくなくて、 (2)の場合は、置換対象と置換前文字が一致する(完全一致)から、置換される・・・ とやりたいのですが、可能でしょうか? Excel.Range.Replaceメソッドなら、LookAt:=xlPartなどで、条件をつけられますが、 VBA.Strings.Replaceの場合、どうすればいいですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

その「完全一致」をReplaceでやる意味はどこにあるんでしょうか…? やろうとしていることは、置換前が変数sだとして If s = "ab" Then s = "" と同じことになっているわけですが。 まあどうしてもReplaceじゃないと嫌だというなら、RegExp.Replaceを使ったらどうですか? Dim re As New RegExp re.Pattern = "^ab$" re.Replace("ab","") あと、意味は分かるから別にいいけど >Excel.Range.Replace >VBA.Strings.Replace こんな書き方は無い。 (String「s」というのは単なる打ち間違いだと思うのでツッコみません)

RVMUAXWXZKS
質問者

お礼

ありがとうございます。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

まぁ敢えてreplace関数を使いたいなら、 dim exp as string, fnd as string fnd = "ab" exp = "ab" msgbox replace(exp, fnd, "", count:=(exp = fnd)) exp = "abc" msgbox replace(exp, fnd, "", count:=(exp = fnd)) とかいった具合でしょうか。 明らかに if fnd = exp then で処理したほうが簡単と私も思いますが。

RVMUAXWXZKS
質問者

お礼

ありがとうございます。

関連するQ&A

  • Replace関数ですか?Replaceメソッドで

    VBAの基本的な質問なのですが ************************************* Sub test() Cells.Replace What:="あああ", Replacement:="いいい" End Sub ************************************* の「Replace」は、 Replace関数ですか? Replaceメソッドですか? オブジェクトブラウザで確認すると ************************************* Excel.Range のメンバ VBA.Strings のメンバ Office.TextRange2 のメンバ Excel.WorksheetFunction のメンバ ************************************* のReplaceがあるのですが 例のReplaceはどれに該当するか教えてください。 ご回答よろしくお願いします。

  • エクセルVBAのReplaceメソッドについて

    エクセル表内のある文字列をVBAのReplaceメソッドを使用して、別の文字列に一括変換したいと考えてます。引数で指定する『置換後の文字列』として該当セルの一つ上のセル(A2に対象文字列がある場合は、A1の値)を指定したいのですが、どのように指定したらよいのか分かりません。Replaceメソッドで置換後の文字列として一つ上のセルの値を指定する事は可能でしょうか。宜しくお願いします。

  • 半角の?を全角の?にVBAで置換する方法

    A1に「ありますか?」を入力して、 Sub test1() Range("a1").Value Replace(Range("a1").Value, "?", "?") End Sub なら、ハテナが全角になるのですが Sub test2() Range("a1").Replace What:="?", Replacement:="?", LookAt:=xlPart End Sub だと、??????になってしまいます。 前後のコードの関係で、test2の方法で置換したいのですが、どうすればいいでしょう? Replace関数ではなく、Replaceメソッドで?だけを全角にする方法を教えてください。

  • オブジェクト、プロパティ、メソッドの関係

    環境:OS.Win2000、Excel2000VBA プロパティやメソッドの呼び出し方法に疑問があります。 ExcelのVBAで以下の動作は確認しています。(例1) Dim xlApp As Application Dim xlBook As Worksheet '置換 xlApp.ActiveCell.Replace what:="A", replacement:="B", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False '検索 Set Oret = xlBook.Application.Cells.Find(what:="A", After:=ActiveCell, _ LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _ SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False) 疑問に思っているのは「xlApp.ActiveCell.Replace」の”Replaceメソッド”を オブジェクトブラウザで調べるとRangeオブジェクトと、WorksheetFunctionオブ ジェクトにしか含まれないように受け取れます。またヘルプの「対象」を見ても Replaceが含まれているのは二つしかありません。ようするに以下の二通りでし か使えないように思えるのです。 Dim A As Range Dim B As WorksheetFunction A.Replace ~ B.Replace ~ しかし実際には(例1)のようにApplicationオブジェクトでも”Replaceメ ソッド”を使えます。”Replace関数”を見てみても引数を見ると”Replace メソッド”です。いまひとつ理解が浅いため目的の動作をさせるのにどのオ ブジェクトからメソッドを呼べば良いのか分かりません。基本的な事なのか もしれませんが、ぜひご回答くださいよろしくお願いします。

  • 「ゞ」のみ置換するにはどうすればいいでしょう?

    「ゞ」を置換したいのに、 「ゞ」の次の文字まで置換されてしまう。 Sub test() Dim str会社名 As String str会社名 = "いすゞ自動車" Debug.Print Replace(str会社名, "ゞ", "ず") End Sub を実行すると 「ゞ自」が対象になってしまうのですが、 どうしてでしょうか? 「ゞ」は一文字ですよね? Replaceで「ゞ」のみ置換するにはどうすればいいでしょう?

  • エクセル(マクロ)置換2 置換用リストを1行ずつ読み込むには

    おはようございます。 エクセルは使いなれてますがVBAは記録を使っていて 書き換える程度なので調べてもあまり理解できず困ってます。 先程質問して、結合セルの置換に関しては解決したのですが、 もし簡単にできるのであればと質問させて頂きました。 今置換用のシートは A列に置換前の文字 B列に置換後の文字が入ってます。 そして対象のシートが置換されるようになってるのですが、 これが列ではなく 1行目に置換前の文字 2行目に置換後の文字として処理するのには どこを書き換えればよろしいのでしょうか? 色々試しましたがうまくいきませんでした。 実は、1行目に(A1セルに学生名(1)・A2のセルに住所(1))など20個くらい項目があります 2行目以降に5000行程、学生のデータが入ってます。 各会社の履歴書フォーマットは違うのですが、 入力欄が学生名(1)や住所(1)など入っている項目が同じなので 置換しております。 今は、1行ずつ下のデータを置換シートに貼り付けて 履歴書のシートで置換えをして 新しいファイルにコピーし保存して次のデータという アナログな処理をしております。 同じフォーマット(履歴書)でしたらvlookupなどが使えたのですが。。。 フォーマットによって1つのセルに、学生名(1)と住所(1)が両方入っていたりするので諦めました。 対象セルの場所も形も違いますしね・・・ 列で処理していたマクロを参考に下に貼り付けました。 明日の昼までにあと4000行を処理しなければならなくて困ってます。 お手数ですがどうぞよろしくお願いいたします。 Sub 置換() With ThisWorkbook If ActiveSheet Is .Worksheets(1) Then Exit Sub For i = 1 To .Worksheets(1).Range("A500").End(xlUp).Row ActiveSheet.Range("A1:Z200").Replace _ What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End With End Sub

  • 置換する場合も最高文字数は何文字ですか?

    エクセルvbaで置換する場合も最高文字数は何文字ですか? と言うのも、 Cells(1, 1).Replace What:=mystr, Replacement:="", LookAt:=xlPart で、mystrは260文字なのですが、これを実行しようとすると 型が一致しません。(Error 13) と言うエラーになるのですが、 これは変数に格納されている文字数が多いせいか、他のエラーなのかわからないのですが 文字制限ってあるのでしょうか?

  • 置換のVBA

    エクセルVBAの置換のことです。 ("abc 2rme3xk5")  を  ("abc N")  のように置換させるにはどうすればいいでしょうか? Nは変数です。 ( )  や " も対象です。 以下のようにやってみましたがダメでした。 Rng.Value = Replace(Rng.Value,"abc*""","abc " & N & """")

  • エクセル(マクロ)置換 結合されたセルに対しての置換

    こんばんは、 今置換用のマクロをこちらで検索して使ってましたが 使用するエクセルのフォーマットが 1セルに入力されてるのではなく、3つのセルを結合されている物に入力されているもので 下記のマクロだと、正しく置換されておりません。 置換変換用のシートと、置換したいシートがある状態で、 下記のマクロだとなぜ結合されたセル内の文字は置換えできないのでしょうか? 結合されてないセルですと、置換はちゃんとされております。 Sub 置換() With ThisWorkbook If ActiveSheet Is .Worksheets(1) Then Exit Sub For i = 1 To .Worksheets(1).Range("A65536").End(xlUp).Row ActiveSheet.Cells.Replace _ What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End With End Sub 明日の昼までに5000個のファイルを置換えするので これが出来ればなぁと思っております。 大変お手数ですが教えて頂けると助かります では、よろしくお願いいたします。

  • Excel VBA 全てのセルの一部に特定の語句があれば置換したい。

    Excel VBA 全てのセルの一部に特定の語句があれば置換したい。 Excel VBA初心者です。 Excelの全てのセルに対して、特定の語句があれば別の特定語句で置換したいのですが、どうしたら良いかわかりません。 全角と半角が混在していますので、これは無視したいですし、変換したい文字列の位置は不定です。Excel 2007です。 取り敢えず、細かなな条件は無視して書いたコードは Dim myCell As Range Sub rep() For Each myCell In Selection myCell.Value = Replace(myCell.Value, "OLD", "NEW") Next myCell End Sub カーソルのある所は置換されますが、それで終わりです。 ご教授下さい。

専門家に質問してみよう