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) こちらを参照して下さい。
正規表現は複雑なパターンマッチングとテキストの検索置換するためのツールです、マクロVBAで正規表現を使う場合はRegExpオブジェクトを使用します、RegExpは、VBScriptに正規表現として用意されているオブジェクトです。メタ文字 メタ文字の一覧です。

連続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]]]) expression 必ず指定します。

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



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

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


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

Excel将棋:駒を動かす|VBAサンプル集(8月9日)
Excel将棋:将棋進行クラスの作成|VBAサンプル集(8月8日)
Excel将棋:将棋盤クラスの作成&単体テスト|VBAサンプル集(8月8日)
Excel将棋:位置クラスをデフォルトインスタンスに変更|VBAサンプル集(8月7日)
VBAで数値を漢数字に変換する方法|エクセル雑感(8月6日)
Excel将棋:駒台クラスの作成&単体テスト|VBAサンプル集(8月6日)
Excel将棋:駒クラスの単体テスト|VBAサンプル集(8月5日)
Excel将棋:駒クラスの作成|VBAサンプル集(8月5日)
Excel将棋:クラスの設計|VBAサンプル集(8月4日)
Excel将棋:マクロVBAの学習用|VBAサンプル集(8月3日)


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

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




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


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



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