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技術解説」の記事

If条件式のいろいろな書き方:TrueとFalseの判定とは

If条件式の書き方で、VBAプログラムは大きく様相が変わってきます、VBAを習い始めは、比較演算子で比較した結果が 正しければTrue、間違っていればFalse という事で理解するはずです。しかし、いろいろなサンプルコードを見ていると、「あれっ」比較演算子が無い… というようなIfステートメントやSelectCas…
VBAでの括弧()の使い方、括弧が必要な場合
・基本文型 ・VBAにおける括弧() ・VBAにおける半角空白の意味 ・戻り値を他の用途に使う時 ・括弧()の使い方の基本文型 ・Callを省略しなければ全て括弧が必要になる ・最後に一言
VBAにおけるピリオドとカンマとスペースの使い方
・ピリオド「.」 ・カンマ「,」 ・スペース「 」
変数とプロシージャーの命名について
VBAを習い始めると、「変数」について学びます、変数に付ける名前を変数名と呼び、若干の規則はあるが、好きな名前を付けて良いと教わります。好きな名前って…ケイコ、ハルカ、アツコ… まあ、それでも良いけど、入れるデータが分かるような名前がよいですね、わかり易い名前を付けましょう。
文字列置換の基本と応用(Replace)
データクレンジングと名寄せ
複数の名簿を突き合わせて一つにする、いわゆる「名寄せ」名寄せを行うためには、その前にデータクレンジングを行う必要があります、データクレンジングとは、データの中から、重複の排除、誤記、表記の揺れの修正などを行い、データの品質を高めることです。データを整形して、扱いやすいデータに変換します。
ForとIfのネストこそがVBAの要点
・第1に考える事・・・大外の繰り返しを作成 ・第2に考える事・・・1支店だけを作成 ・第3に考える事・・・昨対比の判定 ・第4に考える事・・・3支店の繰り返し ・第5に考える事・・・3支店の繰り返しを全体の中に組み込む ・最後に考える事・・・最後の仕上げ ・目指すべきVBAの書き順・・・VBAが上達したら
For Next の使い方いろいろ
VBAの繰り返し処理としては、ForNextまたはDoLoop この二つを最初に学んだのではないでしょうか。プログラムにおける繰り返し処理は、基本中の基本です。特に使用頻度の高いForNextを重点的に学んでいることと思いますが、書き方、使い方は、いくつかのパターンがあります。
複数条件判定を行う時のコツ
・全ての条件を満たしている時 ・どれか一つでも条件を満たしている時 ・全ての条件を満たしていない時 ・条件判定に関連する記事
ブール型(Boolean)のis変数・フラグについて
・ブール型(Boolean)について ・ブール型(Boolean)のis変数・フラグの使い方


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

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




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


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


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