エクセルの機能で「置換」という指定した
文字・数値を別の文字・数値に置き換える機能があります。
通常の置換機能はこちらから☟
【置き換え】文字・数値の置換をシート・ブック内で様々な条件で行う ► 独学エクセル塾 (dokugakuexcel.com)
その置換機能がマクロVBAでも実行することができます。
今回は選択範囲・複数範囲での置換や部分一致・完全一致置換、
大文字・小文字の区別など様々な調整方法をまとめてますので
ぜひ参考にしてみてください。
それでは見ていきましょう。
■忙しい人向けのコピペ用プログラム
赤字の部分をカスタムして使用してください。
Sub 文字数値の部分一致置換() Range("ここに置換対象の範囲").Replace What:="置換前の文字・数値", Replacement:="置換後の文字・数値", LookAt:=xlPart End Sub
■文字・数値を置き換える
・置換の基本プログラム
対象範囲.Replace What:=検索文字・数値, Replacement:=置換文字・数値
・置換のオプション機能
名称 | 内容 | 省略可否 | |
What | – | 検索する文字・数値 | 省略不可 |
Replacement | – | 置換する文字・数値 | |
LookAt | xlPart | 一部でも置換 | 省略可 |
xlWhole | 全て当てはまれば置換 | ||
SearchOrder | xlByColumns | 列方向に置き換え | |
xlByRows | 行方向に置き換え | ||
MatchCase | True | 大文字と小文字を区別 | |
MatchByte | False | 全角半角を区別しない |
■ Replaceを使用して文字・数値を置き換える
・通常の置換
では見本を元に進めていきます。
下図をご覧ください。
B3に「1」という数値がありますね。
では「1」を「2」に置き換えてみましょう。
使用方法はこのようになります。
対象範囲.Replace What:=検索文字・数値, Replacement:=置換文字・数値
対象範囲は置き換えたい範囲なので「B3」ですね。
検索文字・数値は「1」、置換文字・数値は「2」ですね。
それでは当てはめてみましょう。
Range(“B3”).Replace What:=1, Replacement:=2
プログラムに直すとこのようになります。
Sub 文字数値の置換()
Range(“B3”).Replace What:=1, Replacement:=2
End Sub
それでは実行してみたいと思います。
「1」から「2」に変更することができました。
・複数範囲の置換方法
先ほど置換方法は複数の範囲でも置換が可能です。
下図の見本をご覧ください。
B2からE4の範囲に「A」または「B」の文字列が入力されてあります。
このなかの「A」を「C」に一気に置き換えてみましょう。
プログラムの構造を振り返りましょう。
対象範囲.Replace What:=検索文字・数値, Replacement:=置換文字・数値
この対象範囲を複数範囲にするだけで作業が可能になります。
プログラムは以下の通りです。
Sub 文字数値の置換()
Range(“B2:E4”).Replace What:=”A”, Replacement:=”C”
End Sub
それでは実行していきます。
結果はこのようになります。
複数範囲でも「A」が「C」になりました。
■オプションを使用して置換条件を設定する
通常のエクセルの機能の置換のように
VBAの置換でも大文字・小文字の区別や、全角・半角の区別などの機能もあります。
不要であれば省略可能なプログラムですが、必要な場合に追加してください。
それでは見ていきましょう。
・検索内容の一部の置換・完全一致のみ置換する
まずは検索内容が一部でも当てはまれば置き換える方法と、
完全一致で置き換える方法について紹介します。
使用するのは下記の通りです。
部分一致:LookAt:=xlPart
完全一致:LookAt:=xlWhole
下図をご覧ください。
「AAA」という文字がD2とD3に入力してあります。
そして今回は「A」から「B」に置き換えていきます。
2行目は部分一致のLookAt:=xlPartで実行。
3行目は完全一致のLookAt:=xlWholeを使用して実行していきます。
使用方法は簡単で、これまで説明した
「対象範囲.Replace What:=検索文字・数値, Replacement:=置換文字・数値」
の後に「,」を入力して追記するだけです。
それではプログラムを見ていきましょう。
Sub 文字数値の部分一致置換()
Range(“D2″).Replace What:=”A”, Replacement:=”B”, LookAt:=xlPart
Range(“D3″).Replace What:=”A”, Replacement:=”B”, LookAt:=xlWholeEnd Sub
こちらを実行するとこのようになります。
部分一致で置き換えたものは、「A」である文字はすべて「B」になるため
「BBB」に変化しました。
完全一致の方は「A」で完全一致しないので置き換えはされていません。
では、今度は「AAA」を「BBB」に置き換えてみましょう。
プログラムはこのようになります。
Sub 文字数値の部分一致置換()Range(“D2″).Replace What:=”AAA”, Replacement:=”BBB”, LookAt:=xlPart
Range(“D3″).Replace What:=”AAA”, Replacement:=”BBB”, LookAt:=xlWholeEnd Sub
実行した結果はこのようになります。
今度は「D3」の「AAA」も完全一致するので「BBB」に変化してくれました。
・列方向/行方向に置き換え
次に列方向に置き換えするのか、行方向に置き換えするのか制御する方法です。
使用するものは下記の通りです。
列方向に置き換え:SearchOrder:=xlByColumns
行方向に置き換え:SearchOrder:=xlByRows
使用方法は簡単で、先ほど同様に通常の置換プログラムの後に追加すればいいだけです。
一例でプログラムを載せます。
Range(“D2:R4″).Replace What:=”A”, Replacement:=”B”
このプログラムは「D2からR4」の範囲の「A」を「B」に置き換えるプログラムですが
置き換える方向を行方向に置き換えたい場合はこのようになります。
Range(“D2:R4″).Replace What:=”A”, Replacement:=”B”, SearchOrder:=xlByRows
これで行方向に置き換えが可能になりました。
・大文字と小文字を区別
つぎは大文字と小文字を区別する方法です
大文字・小文字の区別をしたい場合は通常のプログラムに
「 MatchCase:=True」を追加すれば区別が可能になります。
下図をご覧ください。
「D2」「D3」に「a」が入力されてあります。
今回は「A」から「B」に置き換えてみます。
それでは通常の置換と大文字・小文字を区別した置換を見てみましょう。
プログラムはこのようになります。
Sub 文字の大文字と小文字の区別置換()
Range(“D2″).Replace What:=”A”, Replacement:=”B”
Range(“D3″).Replace What:=”A”, Replacement:=”B”, MatchCase:=TrueEnd Sub
結果はこのようになりました。
通常は大文字・小文字の区別がない為、小文字の「a」でも「B」に置き換えていますが
区別した方は対象ではなくなるのでそのままになりました。
・全角・半角を区別しない
次は全角・半角の区別しない方法についてです。
通常のプログラムに「MatchByte:=False」を追加すれば全角・半角を区別しない置換が可能になります。
下図をご覧ください。
「D2」「D3」に「半角のア」が入力されてあります。
今回は「全角のア」から「イ」に置き換えてみます。
それでは通常の置換と全角・半角を区別しない置換を見てみましょう。
プログラムはこのようになります。
Sub 文字の全角半角を区別しない置換()
Range(“D2″).Replace What:=”ア”, Replacement:=”イ”
Range(“D3″).Replace What:=”ア”, Replacement:=”イ”, MatchByte:=FalseEnd Sub
結果はこのようになります。
通常は区別するのでそのままですが
MatchByte:=Falseを追加した方は「イ」に置き換えることができました。
■公式の説明
わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟
Range.Replace メソッド (Excel) | Microsoft Docs
■まとめ
いかがだったでしょうか。
VBAでも置換機能が使えるのは便利な機能ですよね。
ぜひ身に着けて活用してみてください。
次回はSelect Caseの機能について紹介します。記事はこちらから☟
【マクロVBA知識 24】複数のIfを短縮!Select Caseで様々な条件・ケースの分岐処理 ► 独学エクセル塾 (dokugakuexcel.com)
それでは次回の記事でお会いしましょう。