郵便番号を自動フォーマット(ハイフン挿入)する住所録整形マクロ
実務でよくある「郵便番号が 1234567 のように7桁続けて入力されている」ケースを、自動的に 123-4567 の形式に整えるマクロです。
前回の住所録整形マクロに「郵便番号の自動フォーマット」を組み込みました。
📋 想定データ構成
- A列: 氏名
- B列: 郵便番号(例:1234567 または 123-4567)
- C列: 都道府県
- D列: 市区町村
- E列: 番地
- F列: 建物名(任意)
- G列: 整形後の住所(出力先)
マクロコード例
Sub 住所録自動整形_郵便番号フォーマット()
Dim lastRow As Long
Dim i As Long
Dim addr As String
Dim zipCode As String
' A列(氏名)を基準に最終行を取得
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow ' 1行目は見出しと仮定
addr = ""
' --- 郵便番号の整形 ---
zipCode = Replace(Cells(i, "B").Value, "-", "") ' ハイフンを除去
If Len(zipCode) = 7 And IsNumeric(zipCode) Then
zipCode = Left(zipCode, 3) & "-" & Right(zipCode, 4)
addr = "〒" & zipCode
ElseIf Cells(i, "B").Value <> "" Then
' 7桁以外や不正値はそのまま表示
addr = "〒" & Cells(i, "B").Value
End If
' --- 都道府県 ---
If Cells(i, "C").Value <> "" Then
If addr <> "" Then addr = addr & vbLf
addr = addr & Cells(i, "C").Value
End If
' --- 市区町村 ---
If Cells(i, "D").Value <> "" Then
If addr <> "" Then addr = addr & vbLf
addr = addr & Cells(i, "D").Value
End If
' --- 番地 ---
If Cells(i, "E").Value <> "" Then
If addr <> "" Then addr = addr & vbLf
addr = addr & Cells(i, "E").Value
End If
' --- 建物名(任意) ---
If Cells(i, "F").Value <> "" Then
If addr <> "" Then addr = addr & vbLf
addr = addr & Cells(i, "F").Value
End If
' --- 整形後の住所をG列に出力 ---
Cells(i, "G").Value = addr
Cells(i, "G").WrapText = True ' 折り返し表示を有効化
Next i
MsgBox "住所録の整形が完了しました!", vbInformation
End Sub
VBコードのポイント
Replace(..., "-", "")で入力済みのハイフンを一旦削除。Len(zipCode) = 7かつIsNumeric(zipCode)で7桁の数字か確認。- 正しい場合は
Left(...,3) & "-" & Right(...,4)で123-4567に変換。 - 不正な値(桁数違い・数字以外)はそのまま出力してユーザーに気づかせる。
実行後のイメージ(G列)
〒123-4567
東京都
中央区銀座1-2-3
サンプルマンション101号室
応用アイデア
- 郵便番号が空欄なら「〒未入力」と表示してチェック用にする。
- 郵便番号を自動で「文字列型」に変換して、先頭の0が消えないようにする。
- 郵便番号から都道府県を自動補完する仕組み(郵便番号辞書を使う)に発展させる。

