VBA入門
第99回.Replaceメソッド(置換)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2019-08-10

第99回.Replaceメソッド(置換)


Replaceメソッドは、セル範囲内で条件に当てはまるセルの文字列を置換するものです。


ReplaceメソッドはRangeオブジェクトのメソッドで、
ワークシート操作の「検索と置換」「置換」の機能をマクロVBAで使うものです。

VBA関数のReplace関数とは全く違うものになりますので使い分けが必要です。
文字列操作は、マクロVBAでプログラミングする上で必須です、データ整形、データクレンジング、データクリーニング、これらを行うVBAにおいて不可欠なものが、文字列操作関数です。ここでは、文字列操作に関するVBA関数の一覧と Replace関数、InStr関数、StrConv関数について解説します。
・Replaceメソッドは、指定範囲のセル値の一部を置換するもの
・Replace関数は、指定文字列(変数・セル値等)の一部を置換するものになります

Replaceメソッド の構文

指定されたセル範囲内に入力されている値もしくは数式としての文字列を対象に、指定した文字列を別の文字列に置換します。

Range.Replace(What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte, SearchFormat, ReplaceFormat)

引数の説明


What Excel で検索する文字列を指定します。
Replacement 置き換える文字列を指定します。
LookAt

xlPart:検索テキストの一部を検索します。
xlWhole:検索テキスト全体を検索します。

SearchOrder xlByColumns:列を下方向に検索してから、次の列に移動します。
xlByRows:行を横方向に検索してから、次の行に移動します。
MatchCase 大文字と小文字を区別して検索するには、True を指定します。
MatchByte この引数は、Excel で 2 バイト (全角) 文字の言語サポートが選択またはインストールされている場合にだけ使用できます。
2バイト文字が2バイト文字とだけ一致するようにする場合は、Trueを指定します。
2バイト文字が2バイト文字だけではなく、対応する1バイト文字とも一致するようにする場合はFalseを指定します。
SearchFormat メソッドの検索書式を指定します。
ReplaceFormat メソッドの置換書式を指定します。

引数のLookAt, SearchOrder, MatchCase, MatchByteの設定は、このメソッドを使用するたびに保存されます。
つまり、[検索と置換] ダイアログ ボックスに表示される設定が変わります。
次回メソッドを呼び出したときにこれらの引数を指定しない場合は、保存されている値が使用されます。
このような設定の変更によって生じる問題を避けるには、
メソッドを使用するたびに、すべての引数を明示的に指定してください。

Replaceメソッドはブール値を返しますが、この戻り値を使う必要性はないでしょう。
また、このメソッドを使用してもセルの選択範囲もアクティブセルも変更されません。

Replaceメソッドの注意点

Replaceメソッドを使う上では注意が必要です。
1.処理速度が遅い
2.指定オプションがシート操作とリンクしている
3.表示形式に依存した検索のため、存在していても検索されない場合があるいくつかある

これらReplaceメソッドの注意点については、以下で詳しく説明しています。
VBAのFindメソッドの使い方には注意が必要です
vbafindでの検索が極めて多く、Findメソッドは検索からの流入ではトップクラスです、アクセス解析で分かった事ですが正直少し戸惑っています。なぜなら私はFindメソッドをほとんど使いません、Match関数や配列を使って処理したほうが高速かつ確実に動作するからです。

Replaceメソッドの使用例

Range("A1:A100").Replace What:="A", Replacement:="B", LookAt:=xlPart, MatchCase:=True

A1セル~A100セルの中の、文字"A"を"B"(大文字小文字を区別しています)に置換しています。
これは、



Dim i As Long
For i = 1 To 100
  Cells(i, 1) = Replace(Cells(i, 1), "A", "B")
Next i

このように、
Replace関数を使って書き直すことができます。
Replace関数は、指定された文字列の一部を、別の文字列で指定された回数分で置換した文字列を返します。引数compareの指定りより、全角半角、大文字小文字の扱いが変わります。Replace関数 Replace(expression,find,replace[,start[,count[,compare]]]) expression 必ず指定します。
ただし、
Replace関数では、大文字小文字が区別されます。
以下のように、大文字小文字を区別せずに置換するReplaceメソッドは、

Range("A1:A100").Replace What:="A", Replacement:="B", LookAt:=xlPart, MatchCase:=False

これをReplace関数で、
特にオプション指定せずに、大文字小文字の両方を置換するためには、

Dim i As Long
For i = 1 To 100
  Cells(i, 1) = Replace(Cells(i, 1), "a", "B")
  Cells(i, 1) = Replace(Cells(i, 1), "A", "B")
Next i

このように少し面倒なことをする必要があります。
ただし、Replace関数でも、オプション指定で対応する方法があります。
Replace関数で大文字小文字が区別しない場合は、
引数ComparevbTextCompareを指定します。

Dim i As Long
For i = 1 To 100
  Cells(i, 1) = Replace(Cells(i, 1), "a", "B", , , vbTextCompare)
Next i

ReplaceメソッドとReplace関数の使い分け

Replaceメソッドは実務で使われる機会は少ないように思われます。
実戦では、Replace関数を使って処理する場合の方が多くなるからです。

セル範囲の置換であれば、
For Nextでセル範囲のセル値をReplace関数で置換していく感じになります。
ただし、
セル範囲が広範囲の場合に一気に置換したい場合は、
Replaceメソッドの方が高速で処理されますので適宜使い分けてください。



同じテーマ「マクロVBA入門」の記事

第136回.フォームコントロール
第137回.ActiveXコントロール
第98回.Findメソッド(Find,FindNext,FindPrevious)
第99回.Replaceメソッド(置換)
第132回.その他のExcel機能(グループ化、重複の削除、オートフィル等)
第135回.ジャンプの選択オプション(SpecialCells)
第141回.行・列の表示・非表示(Hidden)
第105回.Callステートメント
第106回.Functionプロシージャー
第107回.プロシージャーの引数
第108回.変数の適用範囲(スコープ,Private,Public)


新着記事NEW ・・・新着記事一覧を見る

Variantの数値型と文字列型の比較|エクセル雑感(7月1日)
VBAのVariant型について|VBA技術解説(6月30日)
VBAのString型の最大文字数について|エクセル雑感(6月20日)
VBAで表やグラフをPowerPointへ貼り付ける|VBAサンプル集(6月19日)
アクティブシート以外の表示(Window)に関する設定|VBA技術解説(6月17日)
マクロ記録での色のマイナス数値について|エクセル雑感(6月16日)
ツイッター投稿用に文字数と特定文字で区切る|エクセル雑感(6月15日)
日付の謎:IsDateとCDate|エクセル雑感(6月14日)
IFステートメントの判定|エクセル雑感(6月13日)
インクリメンタルサーチの実装|ユーザーフォーム入門(6月12日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ