VBA技術解説
文字列置換の基本と応用(Replace)

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
最終更新日:2013-09-05

文字列置換の基本と応用(Replace)


マクロVBAの処理において文字列置換は頻出の処理ですが、これに苦労している初心者の方が多いようです、


そこで文字列置換の基本と応用について解説します。


・文字列内の空白(半角・全角)を取り除く

VBA関数のTrimは前後の空白が削除されるだけです、

そこで、Replace関数を使います。、

Dim strTemp As String
strTemp = " a b   c "
strTemp = Replace(strTemp, " ", "")
strTemp = Replace(strTemp, " ", "")


これが基本です。


置換して変数に入れる、さらに置換して変数に入れる。

これを繰り返す事で、目的の処理を実現します。

上記の場合は、2回だけなので、 関数を入れ子にしても良いでしょう。

strTemp = Replace(Replace(strTemp, " ", ""), " ", "")

しかし、処理回数が多くなる場合は、むやみに入れ子にしない方が可読性がよいです。

例えば、株式会社の表記を統一したい場合には、



strTemp = Replace(strTemp, "㈱", "株式会社")
strTemp = Replace(strTemp, "(株)", "株式会社")
strTemp = Replace(strTemp, "(株)", "株式会社")


このようにしておく事で、いつでも追加記述できますので保守性が良くなります。



・文字列内の連続空白(2つ以上の半角・全角空白)を1つだけにする

Dim strTemp As String
Dim strTemp2 As String
strTemp = " a b     c "
strTemp = Replace(strTemp, " ", " ")
strTemp2 = ""
Do Until Len(strTemp) = Len(strTemp2)
  strTemp2 = strTemp
  strTemp = Replace(strTemp, " ", " ")
Loop


これは、少々テクニックがひつようになります。


Replaceした結果の文字列長が元の文字列長と同じになったら変換終了となります。

つまり、Replaceできなくなるまで、Replaceを繰り返しています。

このような場合に、

正規表現を使ったサンプルを載せているサイトを見かけますが、Replaceだけで十分に対応可能です。

正規表現については、VBAで正規表現を利用する(RegExp) こちらを参照して下さい。
・メタ文字 ・正規表現 ・正規表現RegExpの使い方 ・RegExpオブジェクト ・RegExpの使用例 ・RegExp関連のオブジェクト ・Execute(Matches,Match,SubMatches)の使用例 ・Replaceの使用例 ・先読み:肯定先読み、否定先読み ・正規表現の実践例

連続2個の空白を改行に変換する、これを正規表現で処理しているのを見かけましたが、

上記の変換後の文字をvbLfにするだけで可能です。



Dim strTemp As String
Dim strTemp2 As String
strTemp = " a b     c "
strTemp = Replace(strTemp, " ", " ")
strTemp2 = ""
Do Until Len(strTemp) = Len(strTemp2)
  strTemp2 = strTemp
  strTemp = Replace(strTemp, " ", vbLf)
Loop


この方法は応用範囲の広い、定番テクニックとして覚えておくと良いでしょう。



では最後に、

・090-1234-5678 → 090(1234)5678

Dim strTemp As String
strTemp = "090-1234-5678"
strTemp = Replace(strTemp, "-", "(", , 1)
strTemp = Replace(strTemp, "-", ")", , 1)


Replace関数の第3引数以降を指定することで、各種の置換にも対応できます。


Replace関数の引数の詳細については、

Replace関数:VBA関数
Replace関数は、指定された文字列の一部を、別の文字列で指定された回数分で置換した文字列を返します。引数compareの指定りより、全角半角、大文字小文字の扱いが変わります。Replace関数 Replace(expression,find,replace[,start[,count[,compare]]]) …

こちらを参照して下さい。



同じテーマ「マクロVBA技術解説」の記事

論理積(And)論理和(Or)と真(True)偽(False)の判定
If条件式のいろいろな書き方:TrueとFalseの判定とは
VBAでの括弧()の使い方、括弧が必要な場合
VBAにおけるピリオドとカンマとスペースの使い方
変数とプロシージャーの命名について
文字列置換の基本と応用(Replace)
データクレンジングと名寄せ
ForとIfのネストこそがVBAの要点
For Next の使い方いろいろ
複数条件判定を行う時のコツ


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

列全体を指定する時のRangeとColumnsの違い|ツイッター出題回答 (2023-09-24)
シートのActiveXチェックボックスの指定方法|ツイッター出題回答 (2023-09-24)
ByRef引数の型が一致しません。|ツイッター出題回答 (2023-09-22)
シートコピー後のアクティブシートは何か|ツイッター出題回答 (2023-09-19)
Excel関数の引数を省略した場合について|ツイッター出題回答 (2023-09-14)
セル個数を返すRange.CountLargeプロパティとは|VBA技術解説(2023-09-08)
記号を繰り返してグラフ作成(10単位で折り返す)|ツイッター出題回答 (2023-08-28)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-08-24)
ランクによりボイントを付ける(同順位はポイントを分割)|ツイッター出題回答 (2023-08-22)
OneDrive使用時のThisWorkbook.Pathの扱い方|VBA技術解説(2023-07-26)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロとは?VBAとは?VBAでできること|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.条件分岐(IF)|VBA入門




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


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



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