ExcelマクロVBA技術解説 | 文字列置換の基本と応用(Replace) | Excelマクロの問題点と解決策、エクセル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) こちらを参照して下さい。

連続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関数

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




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

空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)
空白セルを正しく判定する方法2
実行時にトラップ可能なエラー番号一覧
論理積(And)論理和(Or)と真(True)偽(False)の判定
VBAにおける括弧()の使い方
Rangeオブジェクト.Valueの省略について
ユーザー操作を制限する(Locked,Protect,ScrollArea)

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

SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.定数と型宣言文字(Const)|ExcelマクロVBA入門
8.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.ひらがな⇔カタカナの変換|エクセル基本操作



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

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


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

    ↑ PAGE TOP