スポンサーリンク

【Excel/VBA】VBAで正規表現~郵便番号でやってみる

スポンサーリンク
※当サイトは広告を含みます

正規表現を理解しようシリーズ。

バラバラな表記の郵便番号を統一した書式に整える、というのをやってみようと思います。

きれいにしたい対象↓

f:id:mwke:20210822154711p:plain

ちなみに6行目と7行目は郵便番号ではありません。入力ミスのものです。

まず、郵便番号パターンに該当するか、というのを判定してみたいと思います。

RegExpオブジェクトのTestメソッドを利用します。

object.Test(string)
パターンに一致する文字列が検索されたらTrueを返します。
見つからないとFalseを返します。

※引用元

VBAで正規表現を利用する(RegExp)|VBA技術解説 (excel-ubara.com)

まず、正規表現で郵便番号を定義します。

^〒?\d{3}-?\d{4}$

としました。

^〒?  

 ^:で始まる

 郵便番号記号で始まる

 ?:直前の文字が0個か1個

 なので、「〒」で始まる、でも「〒」はなくてもよい、ということになります

\d{3}

 \d:数字一文字

 {3}:直前の文字3文字

 なので「数字三文字」、ということになります

-?

 「-」ハイフンと?なのでハイフン一文字、もしくはなくてもよい

d{4}$

 \d{4}: 数字4文字

 $:で終わる

 なので数字4文字で終わる、ということ

◆◆◆コード◆◆◆

Dim re As RegExp      ’正規表現クラスオブジェクト
Set re = New RegExp

‘検索条件設定
re.Global = True           ’検索範囲(True:文字列の最後まで検索)
re.IgnoreCase = True         ’大文字小文字の区別(True:区別しない)
re.Pattern = “^〒?\d{3}-?\d{4}$”   ’検索パターン”

‘エクセルを走査
‘検索実行
Dim i As Long
For i = 2 To 7
 Cells(i, 2).Value = re.test(Cells(i, 1).Value)
Next i

◆◆◆◆◆◆◆◆◆

A列の文字列をテストし、B列にテスト結果を出力しました。

6行目、7行目は違うよ、と出ましたね。

次に、〒XXX-XXXXという形に統一した表現に置換していこうと思います。

RegExpオブジェクトのReplaceメソッドを利用します。

検索パターンの取り出したいところにカッコを付け加えます。

^〒?(\d{3})-?(\d{4})$

カッコに囲まれたところを取り出すことができます。

最初のカッコは$1で取り出せます。

次のカッコは$2で取り出せます。

その次のカッコは$3で(今回はないけど)・・・という風に何番目のカッコを取り出す、という風に指定できます。

Replaceで対象文字列を「〒(取り出した1つ目の文字列)-(取り出した2つ目の文字列)」という形に置換したいので以下のように書きます。

Replace(対象文字列, “〒$1-$2”)

つまり、こうですね。

re.Replace(Cells(i, 1).Value, “〒$1-$2”)

◆◆◆コード◆◆◆

Dim re As RegExp ‘正規表現クラスオブジェクト
Set re = New RegExp

‘検索条件設定
re.Global = True          ’検索範囲(True:文字列の最後まで検索)
re.IgnoreCase = True        ’大文字小文字の区別(True:区別しない)
re.Pattern = “^〒?(\d{3})-?(\d{4})$”  ’検索パターン”

‘置換
For i = 2 To 7
 Cells(i, 3).Value = re.Replace(Cells(i, 1).Value, “〒$1-$2”)
Next i

◆◆◆◆◆◆◆◆◆

C列に置換後の郵便番号を出力しました。

6行目、7行目はパターンが一致しなかったので、そのまま出力されちゃってますね。

置換の部分を以下のように変更しました。

赤字部分で「パターンに一致してたら置換して出力する」と条件を追加しました。

◆◆◆コード◆◆◆

‘置換
For i = 2 To 7
 If re.test(Cells(i, 1).Value) = True Then
  Cells(i, 3).Value = re.Replace(Cells(i, 1).Value, “〒$1-$2”)
 End If
Next i

◆◆◆◆◆◆◆◆◆

こうなりました。

ふーむ、勉強になりました。使う機会があるといいな。

お読みいただきありがとうございました!

参考とさせていただいたサイト。ありがとうございました。

VBAで正規表現を利用する(RegExp)|VBA技術解説 (excel-ubara.com)

コメント

タイトルとURLをコピーしました