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

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2013-07-21 最終更新日: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 ・・・新着記事一覧を見る

無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)
イータ縮小ラムダ(eta reduced lambda)|エクセル入門(2023-11-20)
PIVOTBY関数(縦軸と横軸でグループ化して集計)|エクセル入門(2023-11-19)


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

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




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


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



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