Home » Excel VBA Rangeオブジェクト » セル検索 » Range.Replaceメソッドの戻り値は?

Range.Replaceメソッドの戻り値は?

動作検証バージョン:Windows 11 Home + 64bit Excel バージョン 2505(ビルド18827.20164クイック実行)

「excelvba replaceメソッド 戻り値」
という検索が行われていました。

オブジェクトブラウザーでライブラリをExcelに限定して「Replace」を完全一致検索すると、上図のように2つのReplaceメソッドがヒットしますが、私はRange.Replaceメソッドの戻り値について調べていた方による検索ではないかと、想像しています。

[スポンサードリンク]

Range.Replaceの戻り値はBooleanだが…

オブジェクトブラウザーの詳細ペインでわかるとおり、RangeオブジェクトのReplaceメソッドの戻り値は、Booleanと定義されています。

Range.Replaceメソッドは名前のとおり置換を行うメソッドですから、置換が行われたらTrueが返され、行われなかったときにFalseが返されるのだろうと、多くの方は期待するのではないかと思います。

ところが奇妙なことに、Range.Replaceメソッドは置換が行われても行われなくても、Trueを返してきます。

Range.ReplaceがTrueを返すことを確認するサンプルマクロ

以下のような簡単なマクロを実行して、変数retの値がどうなるかをローカルウィンドウを表示して確認してみてください。

Sub Replaceメソッドの戻り値を確認する()

 Dim ret As Boolean
 ret = Range("A1:A5").Replace(What:="探す文字列", Replacement:="置換後の文字列")
 Stop

End Sub

置換が行われても行われなくても、変数retの値はTrueになっているはずです。

Range.ReplaceがTrueを返す挙動についての情報

Microsoftの公式ドキュメントでは、この挙動について記述を見つけられませんが、

Stack Overflowの「Excel VBA: Use MsgBox if Replace finds nothing to replace」に以下のコメントがあります。

Docs for Range.Replace suggest it returns a Boolean indicating whether any matches were found, but in my testing it always returns True.

ChatGPTとGrokは事実と異なる回答

いくつかの無料版生成aiに
「Excel VBA の Range.Replace の戻り値は Boolean と定義されていますが、どういうときに False を返しますか」
と質問したのですが、ChatGPTは残念ながら以下のような回答をしてきました。

Range.Replace の戻り値は、1つも置換が実行されなかった場合に False を返します。
逆に、置換が 1 件でも実行されれば True です。

「1つも置換が実行されなかった場合に False を返します」と、実験結果と異なる回答をしてきます。

Grokも以下のような回答です。

Range.Replaceメソッドは、指定された範囲内で検索文字列が見つからなかった場合や、置換処理が実行されなかった場合にFalseを返します。

「検索文字列が見つからなかった場合や、置換処理が実行されなかった場合にFalseを返します」と、こちらも実際の挙動と異なる回答です。

Geminiは事実に合致する回答

それに対しGeminiは、以下のように回答してくれました。

Range.Replace メソッドの戻り値は Boolean と定義されていますが、実際には常に True を返します。 これは、Excel VBA の公式ドキュメントや多くのVBA開発者の経験から確認されている動作です。

実際の挙動どおりの回答です。
そして、

なぜ False を返さないのか?
通常、検索系のメソッドで Boolean を返す場合、検索対象が見つからなかったときに False を返すことが期待されます。しかし、Range.Replace メソッドは、検索文字列が見つからなくても、置換処理自体はエラーなく完了するため、常に True を返す設計になっています。

つまり、「置換処理が正常に実行できたか?」という観点では常に True となります。検索文字列が見つからなかった場合でも、それは「0個の置換が正常に行われた」と解釈されます。

と多くのヒトが期待する内容についてまで言及してくれます。
私は、Geminiの回答どおり「見つからなくても、置換処理自体はエラーなく完了するため、常に True を返す設計になって」いるのだろうと想像しています。

最終更新日時:2025-07-04 09:54

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » セル検索 » Range.Replaceメソッドの戻り値は?

「セル検索」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.