実務でよくある「住所録をきれいにまとめたい」というニーズに対応できるサンプルマクロを紹介します。
ここでは、郵便番号・都道府県・市区町村・番地・建物名が別々の列に入力されていると仮定し、それらを1セルに改行付きでまとめる処理を行います。
想定データ構成
- A列: 氏名
- B列: 郵便番号
- C列: 都道府県
- D列: 市区町村
- E列: 番地
- F列: 建物名(任意)
- G列: 整形後の住所(出力先)
マクロコード例
Sub 住所録自動整形()
Dim lastRow As Long
Dim i As Long
Dim addr As String
' A列(氏名)を基準に最終行を取得
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow ' 1行目は見出しと仮定
addr = ""
' 郵便番号
If Cells(i, "B").Value <> "" Then
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コードのポイント
lastRowで最終行を自動取得 → データ量が変わっても対応可能。vbLfを使ってセル内改行。WrapText = Trueを設定しないと改行が見えない。- 空欄セルはスキップするので、建物名がない場合でもきれいに整形される。
実行後のイメージ(G列)
〒104-0061
東京都
中央区銀座1-2-3
サンプルマンション101号室
応用アイデア
- 氏名と住所をまとめて「宛名ラベル」用に別シートへ出力。
- Wordの差し込み印刷と組み合わせて封筒やはがきに印刷。
- 郵便番号のフォーマット(例:1234567 → 123-4567)を自動整形する処理を追加。
👉 このマクロをベースに「宛名ラベル作成」や「請求書の住所欄整形」に発展させると、実務でかなり役立ちます。

