Excel マクロ: セルの内容全体を置き換えます。1 を置き換えますが、10、11、21 などは置き換えません。

Excel マクロ: セルの内容全体を置き換えます。1 を置き換えますが、10、11、21 などは置き換えません。

Excel スプレッドシート内の大量の数字を単語に置き換える必要があります。例:

1 = hello
12 = goodbye
4 = cat

など。標準の検索と置換で実行できますが、処理するリストが大きいため (約 240 個の数字と単語の組み合わせ)、マクロを使用することにしました。

私はこれを持っています:

Sub findreplacer()
For Each mycell In Range("A1:A1000")
mycell.Replace What:="1", Replacement:="hello"
mycell.Replace What:="12", Replacement:="goodbye"
mycell.Replace What:="4", Replacement:="cat"
Next

End Sub

しかし、12 の 1 が置き換えられるため、セルには goodbye ではなく hello2 と表示されます。「セルの内容全体を一致」が機能するように、特定の数字のみを含むセルにのみ影響させるにはどうすればよいですか?

ご協力いただければ幸いです。

答え1

順序を変更しても問題ありませんが、シート内のすべての値が置き換えられます。シートに11が含まれていて、それが置き換えられない場合は、順序を変更するとhello1に置き換えられます。
セル全体に一致させるには、次のように指定します。

,LookAt:=xlWhole

をReplaceメソッドの別のパラメータとして指定します。ReplaceはRangeの有効なメソッドなので、Forループは必要ありません。代わりに、

Range("A1:A1000").Replace What:="12", Replacement:="goodbye", LookAt:=xlWhole  
Range("A1:A1000").Replace What:="4", Replacement:="cat", LookAt:=xlWhole

答え2

もっと良い解決策があるかどうかはわかりませんが、私の考えでは、逆の順序に並べるということです。たとえば、次のようになります。

Sub findreplacer()
For Each mycell In Range("A1:A1000")
mycell.Replace What:="12", Replacement:="goodbye"
mycell.Replace What:="4", Replacement:="cat"
mycell.Replace What:="1", Replacement:="hello"
Next

End Sub

その場合、まず 12 が「さようなら」に置き換えられ、1 が「こんにちは」に置き換えられる行が来たときには、すでに変更されていることになります。

繰り返しになりますが、おそらくもっと良い解決策があると思いますが、これはあなたが説明したパラメータでの簡単な修正には有効だと思います。

関連情報