透2017/8/312019/4/21Replaceって使っていますか?Replaceはある文字列を検索して、別の文字列に置き換えます。一口にReplaceと言っても、文字列の中から指定の文字列を置き換えるReplace関数と、セル範囲の中から指定の文字列を置き換えるReplaceメソッドがあります。複数条件の置換など基本的な内容から、応用的な内容についても解説していきます。まとめReplace関数とReplaceメソッド冒頭でもご紹介しましたが、Replaceはある文字列を検索して、別の文字列に置き換えます。VBAには文字列の中から指定の文字列を置き換えるReplace関数と、セル範囲の中から指定の文字列を置き換えるReplaceメソッドがあります。指定の文字列をただ検索する場合であれば、ある文字列の中から検索するInStr関数とセル範囲の中から検索するFindメソッドと名前が違うのですが、置き換えの場合はどちらもReplaceと同じで混乱しそうですね。それぞれで呼び出し方、引数の指定が違いますので目的にあわせて使い分けるようにしましょう。Replace関数とReplaceメソッドに分けて解説していきます!Replace関数の使い方Replace関数はある文字列の中から指定した文字列を検索し、別の文字列に置き換えるために使います。Replace関数は以下のように記述します。]」で囲まれた部分は省略することができます。引数の指定について表にまとめました。大文字と小文字を区別せず引数のstartとcountは一緒に使用します。戻り値は引数の指定によって変わってくるので、これも表にまとめます。引数replaceを長さ0の文字列("")で指定すると、findで指定した文字列をすべて削除した文字列を返します。サンプルコードで確認しましょう。Sub実行結果:このサンプルコードではString型変数exp内の半角スペースを空文字に置き換えることで半角文字を削除しています。改行コード「vbCrLf」を検索して置換することもできます。サンプルコードで確認しましょう。Sub実行結果:このサンプルコードでは、改行コード「vbCrLf」を空文字("")に置き換え削除しています。大文字と小文字の区別についてReplace関数は引数を設定しなければ、大文字と小文字を区別して置換します。大文字と小文字の区別をなしにしたい場合は、引数のcompareをvbTextCompareに指定します。Sub実行結果:このサンプルコードでは、Replace関数の引数findを検索する際にバイナリーモードで大文字と小文字を区別する場合とテキストモードで大文字と小文字を区別しない場合で置換をしています。引数compareを指定せず、デフォルト設定のバイナリーモードの場合、大文字と小文字で違うので検索で見つからずに文字列の置換が行われていません。これに対して引数compareをvbTextCompareで指定しテキストモードの場合は、文字列の置換が行われています。正規表現による文字列の置換Replace関数は正規表現を使って置換することはできません。正規表現を別の文字列に置換するにはRegExpオブジェクトのReplace関数を使います。サンプルコードで確認していきましょう。Sub実行結果:このサンプルコードでは、まずaからzのアルファベット(小文字)を正規表現として指定しています。RegExpオブジェクトのPatternプロパティを使って正規表現を指定します。そのあとでRegExpオブジェクトのReplace関数を使って正規表現を空文字(””)に変換しています。複数条件の置換についてReplace関数は検索する文字列を複数指定することはできません。検索する文字列を複数指定したい場合は、Replace関数を繰り返し使いましょう。Sub実行結果:このサンプルコードでは、Replace関数の引数findに指定する複数の文字列を動的配列arrに格納しています。Eachステートメントを使って、Replace関数の引数findに繰り返し指定することで複数の文字列で検索して空文字("")に置換しています。Replaceメソッドの使い方Replaceメソッドは、指定したセル範囲内から検索した文字列を他の文字列に置換する場合に使用します。Rangeオブジェクトから呼び出します。ReplaceFormat)Objectにはセル範囲のRangeオブジェクトを指定します。戻り値はBoolean型です。検索するデータがみつかった場合は、Trueを返します。検索するデータを含むセルが存在しない場合は、Falseを返します。Replaceメソッドは引数で検索条件を指定します。引数が多いのでそれぞれの引数の説明を表にまとめました。引数のWhatとReplacementは必ず指定する必要があります。その他の指定は省略することができます。全部が一致するセルを置換する場合は、Replaceメソッドの引数LookAtをxlWholeで指定します。サンプルコードでみていきましょう。Sub実行結果:このサンプルコードでは、Replaceメソッドを使って文字列「エンジニア」を「engineer」に置換しています。Replaceメソッドの引数LookAtをxlWholeで指定して、全部が一致するセルを検索し置換するように設定しています。一部が一致するセルを置換する場合は、Replaceメソッドの引数LookAtをxlPartで指定します。Sub実行結果:このサンプルコードでは、Replaceメソッドを使って文字列「エンジニア」を「engineer」に置換しています。Replaceメソッドの引数LookAtをxlPartで指定して、一部が一致するセルを検索し置換するように設定しています。ワイルドカードの使い方Replaceメソッドの引数Whatにはワイルドカードを使って指定することができます。サンプルコードで確認しましょう。Sub実行結果:このサンプルコードでは、Replaceメソッドの引数Whatに「*」(アスタリスク)を使ってワイルドカードで指定しています。「侍*」で指定していますので、セル内の文字列の先頭が「侍」であれば「Samurai」に置換さています。複数条件の置換についてこれまでは1つのデータで検索し、置換する場合についてみてきました。複数のデータで検索し、置換する場合についてみていきましょう。Replaceメソッドは複数の条件を指定することができませんので、Replaceメソッドを繰り返しで使用する必要があります。サンプルコードで確認しましょう。Sub実行結果:このサンプルコードでは、Replaceメソッドを使って文字列「侍」を「Samurai」に、「エンジニア」を「Engineer」に置換しています。Replaceメソッドの引数LookAtをxlPartで指定して、一部が一致するセルを検索し置換するように設定しています。Replaceメソッドの引数WhatとReplacementに指定する複数の文字列をDictionaryオブジェクトmyDicに格納しています。変換元の検索する文字列をDictionaryオブジェクトのキーに、変換後の置換する文字列を値に指定しています。Eachステートメントを使って、Replaceメソッドの引数WhatとReplacementに繰り返し指定することで複数の文字列で検索してそれぞれの条件で置換しています。まとめここでは、Replaceの使い方について説明しました。文字列の中から指定の文字列を置き換えるReplace関数と、セル範囲の中から指定の文字列を置き換えるReplaceメソッドがあります。それぞれで呼び出し方、引数の指定が違いますので混同せずに使い分けるようにしましょう。使いこなすことができるように、この記事を何度も参考にして下さいね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。お問合せはこちらでも受け付けています。