VBAで表の書式を一括で整えるには、ClearFormats で書式をリセットしてから、フォント・罫線・列幅・ヘッダー色などを再設定するだけです。ボタン1つで「誰が編集してもバラバラにならない」フォーマットを作れます。
この記事では、次の内容を順番に解説します。
- 書式を一括クリア&再設定する基本コード
- ヘッダー行を目立たせる書式の設定
- 列幅・行高を自動調整する方法
- 数値・日付・パーセントの表示形式を設定する方法
- 行の交互色(ゼブラストライプ)を設定する方法
書式を一括クリア&再設定するには?
まず使用範囲全体の書式をリセットし、フォントと罫線を統一します。値やデータはそのまま残ります。
Sub CleanAppearance()
Dim ws As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim rng As Range
Set ws = ActiveSheet
' 最終行・最終列を自動取得
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
' 使用範囲を設定
Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol))
' 書式をすべてクリア(値は保持)
rng.ClearFormats
' フォントと罫線を統一
With rng
.Font.Name = "メイリオ"
.Font.Size = 10
.Font.Color = RGB(50, 50, 50) ' 文字色:濃いグレー
.Interior.Color = xlNone ' 背景色をクリア
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Borders.Color = RGB(200, 200, 200) ' 罫線色:薄いグレー
.HorizontalAlignment = xlLeft ' 左揃えに統一
End With
End Sub
ClearFormatsのポイント:ClearFormats はセルの書式のみを削除します。値・数式・コメントは残ります。値ごと削除したい場合は Clear、値だけ削除したい場合は ClearContents を使います。
| メソッド | 削除される内容 |
|---|---|
ClearFormats | 書式のみ(値・数式は残る) |
ClearContents | 値・数式のみ(書式は残る) |
Clear | 値・数式・書式すべて |
ヘッダー行を目立たせるには?
1行目(ヘッダー行)だけ別の書式を設定して、見出しを強調します。
' ヘッダー行の書式設定(CleanAppearanceの後に追加)
With ws.Range(ws.Cells(1, 1), ws.Cells(1, lastCol))
.Font.Bold = True
.Font.Color = RGB(255, 255, 255) ' 文字色:白
.Interior.Color = RGB(55, 96, 146) ' 背景色:紺色
.HorizontalAlignment = xlCenter ' 中央揃え
End With
背景色のRGB値を変えるだけでテーマカラーに合わせられます。よく使う色の例:
- 紺:
RGB(55, 96, 146) - グリーン:
RGB(70, 130, 80) - グレー:
RGB(89, 89, 89) - 薄い青:
RGB(173, 216, 230)(文字色は黒にする)
列幅・行高を自動調整するには?
書式を整えたあとに列幅と行高を自動調整すると、内容に合ったサイズになって読みやすくなります。
' 使用範囲の列幅を自動調整
ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)).Columns.AutoFit
' 使用範囲の行高を自動調整
ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)).Rows.AutoFit
特定の列だけ固定幅にしたい場合は次のように書けます。
' A列を固定幅20に設定する
ws.Columns("A").ColumnWidth = 20
' B列以降は自動調整する
ws.Range(ws.Cells(1, 2), ws.Cells(lastRow, lastCol)).Columns.AutoFit
数値・日付の表示形式を設定するには?
ClearFormats を実行すると表示形式もリセットされます。数値や日付が入っている列には再度表示形式を設定する必要があります。
' B列(2列目)に数値書式を設定(カンマ区切り、小数なし)
ws.Columns("B").NumberFormat = "#,##0"
' C列に日付書式を設定
ws.Columns("C").NumberFormat = "yyyy/mm/dd"
' D列にパーセント書式を設定(小数1桁)
ws.Columns("D").NumberFormat = "0.0%"
' E列に円マーク付き書式を設定
ws.Columns("E").NumberFormat = "¥#,##0"
よく使う表示形式の一覧:
| 用途 | NumberFormat | 表示例 |
|---|---|---|
| 整数(カンマ区切り) | "#,##0" | 1,234 |
| 小数2桁 | "#,##0.00" | 1,234.56 |
| 日付 | "yyyy/mm/dd" | 2025/06/01 |
| 年月 | "yyyy年m月" | 2025年6月 |
| パーセント | "0.0%" | 12.3% |
| 円マーク | "¥#,##0" | ¥1,234 |
行の交互色(ゼブラストライプ)を設定するには?
データ行の偶数行・奇数行を交互に色分けすると、横に長い表でも行が追いやすくなります。
Sub SetZebraStripe()
Dim ws As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim i As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
' 2行目以降(データ行)に交互色を設定
For i = 2 To lastRow
If i Mod 2 = 0 Then
' 偶数行:薄い青
ws.Range(ws.Cells(i, 1), ws.Cells(i, lastCol)).Interior.Color = RGB(235, 243, 252)
Else
' 奇数行:白
ws.Range(ws.Cells(i, 1), ws.Cells(i, lastCol)).Interior.Color = RGB(255, 255, 255)
End If
Next i
End Sub
すべてをまとめた「見た目クリーナー」の完成コード
ここまでの処理をひとつのSubにまとめます。ボタンにこれを割り当てておけば、ワンクリックで表全体を整えられます。
Sub FormatCleaner()
Dim ws As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim rng As Range
Dim i As Long
Set ws = ActiveSheet
' 処理を高速化
Application.ScreenUpdating = False
' 最終行・列を取得
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol))
' 書式をクリア
rng.ClearFormats
' 全体のフォント・罫線
With rng
.Font.Name = "メイリオ"
.Font.Size = 10
.Font.Color = RGB(50, 50, 50)
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Borders.Color = RGB(200, 200, 200)
.HorizontalAlignment = xlLeft
End With
' ヘッダー行
With ws.Range(ws.Cells(1, 1), ws.Cells(1, lastCol))
.Font.Bold = True
.Font.Color = RGB(255, 255, 255)
.Interior.Color = RGB(55, 96, 146)
.HorizontalAlignment = xlCenter
End With
' データ行の交互色
For i = 2 To lastRow
If i Mod 2 = 0 Then
ws.Range(ws.Cells(i, 1), ws.Cells(i, lastCol)).Interior.Color = RGB(235, 243, 252)
Else
ws.Range(ws.Cells(i, 1), ws.Cells(i, lastCol)).Interior.Color = RGB(255, 255, 255)
End If
Next i
' 列幅・行高を自動調整
rng.Columns.AutoFit
rng.Rows.AutoFit
' 処理を元に戻す
Application.ScreenUpdating = True
MsgBox "書式を整えました。"
End Sub
まとめ
- ClearFormats:書式だけリセット。値・数式はそのまま残る。
- フォント・罫線の統一:With構文でまとめて設定すると短くスッキリ書ける。
- ヘッダー行の強調:Bold・背景色・文字色を設定して見出しを目立たせる。
- 列幅・行高:AutoFitで自動調整、または ColumnWidth で固定幅指定。
- 数値・日付の表示形式:ClearFormats後は NumberFormat で再設定が必要。
- 交互色:i Mod 2 で偶数・奇数行を判定して色分けする。
- ScreenUpdating = False:大きな表を処理するときは最初に設定して高速化する。
よくある質問
ClearFormatsを実行したら数値がただの数字になってしまいました
ClearFormats は表示形式もリセットするため、カンマ区切りや日付書式などが解除されます。必要な列には NumberFormat で表示形式を再設定してください。この記事の「数値・日付の表示形式を設定するには?」のセクションのコードを参考にして下さい。
特定の列だけ書式をクリアせずに残したい場合はどうすればいいですか?
全体に ClearFormats をかける前に、残したい列の書式を変数や配列に保存しておき、クリア後に再設定する方法があります。または、クリアする範囲を「残したい列を除いた範囲」に限定する方法も使えます。
' A列とC列を除いた範囲だけクリアする例
ws.Range("B:B,D:Z").ClearFormats
条件付き書式(Conditional Formatting)もClearFormatsで消えますか?
消えません。ClearFormats は通常の書式(フォント・罫線・背景色など)のみを削除します。条件付き書式を削除したい場合は rng.FormatConditions.Delete を別途実行してください。
ScreenUpdating = Falseを設定したまま処理が止まったときはどうなりますか?
マクロが途中でエラー終了すると ScreenUpdating が False のままになることがあります。その場合はVBEから Application.ScreenUpdating = True をイミディエイトウィンドウで実行するか、Excelを再起動すると元に戻ります。On Error GoTo でエラー処理を書いておき、終了時に必ず True に戻す処理を入れておくと安全です。
このマクロをボタンに割り当てるにはどうすればいいですか?
Excelの「開発」タブ →「挿入」→「ボタン(フォームコントロール)」でシートにボタンを配置し、クリックしたときに実行するマクロとして FormatCleaner を選択します。「開発」タブが表示されていない場合は、Excelのオプション →「リボンのユーザー設定」から「開発」にチェックを入れて表示させてください。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



