帳票の見出しを整える、セル結合・結合解除・スタイル適用の3つのマクロ
タグ:
ExcelVBA業務効率化Tips初心者
投稿先: Qiita
はじめに
請求書や日報の見出しは、セルを結合して中央に置き、色やフォントをそろえて見栄えを整えます。逆に、他の部署から届いた「見出しが結合されたままの表」は、並べ替えやフィルタの前に結合を解く必要があります。この記事では、そんな帳票まわりの整形を数秒で終わらせる3つのマクロを、使う場面とあわせて紹介します。
1. タイトル行を結合して、中央に置く
MergeCellsFormattingは、選択したセル範囲を1つに結合して、水平・垂直とも中央揃えにするマクロです。結合時の確認ダイアログは出さずに実行します。
Sub MergeCellsFormatting()
On Error GoTo ErrorHandler
Dim rng As Range
If TypeName(Selection) <> "Range" Then
MsgBox "セル範囲を選択してから実行してください", vbCritical, "エラー"
Exit Sub
End If
Set rng = Selection
If rng.Cells.Count < 2 Then
MsgBox "2つ以上のセルを選択してください", vbCritical, "エラー"
Exit Sub
End If
Application.DisplayAlerts = False
With rng
.Merge
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Application.DisplayAlerts = True
MsgBox "セルを結合しました", vbInformation, "完了"
Exit Sub
ErrorHandler:
Application.DisplayAlerts = True
MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub
使う場面: A1:F1を選択して実行すると、表の幅いっぱいのタイトル行になります。入力済みの文字は左上のセルのものだけが残り、ほかのセルの値は消えるので、タイトルは結合前に左上のセルへ入れておきます。
2. 結合された見出しを解除して、全セルに値を入れ直す
UnmergeCellsFormattingは、選択範囲にある結合セルを解除し、結合されていた全セルに元の値を入れ直すマクロです。
Sub UnmergeCellsFormatting()
On Error GoTo ErrorHandler
Dim rng As Range
Dim cell As Range
Dim mergedArea As Range
Dim mergedValue As Variant
If TypeName(Selection) <> "Range" Then
MsgBox "セル範囲を選択してから実行してください", vbCritical, "エラー"
Exit Sub
End If
Set rng = Selection
For Each cell In rng
If cell.MergeCells Then
Set mergedArea = cell.MergeArea
mergedValue = mergedArea.Cells(1, 1).Value
mergedArea.UnMerge
mergedArea.Value = mergedValue
End If
Next cell
MsgBox "セルの結合を解除しました", vbInformation, "完了"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub
使う場面: 部署名が縦に結合された一覧を受け取ったとき、選択して実行すると「営業部」が結合範囲の全行に入ります。そのまま並べ替えやフィルタ、ピボットテーブルに使えるデータになります。
3. スタイル名を指定して、見出しの見た目をそろえる
SetCellStyleは、選択範囲にExcel組み込みのセルスタイルを適用するマクロです。実行するとスタイル名の入力欄が出ます。
Sub SetCellStyle()
On Error GoTo ErrorHandler
Dim rng As Range
Dim styleName As String
If TypeName(Selection) <> "Range" Then
MsgBox "セル範囲を選択してから実行してください", vbCritical, "エラー"
Exit Sub
End If
Set rng = Selection
styleName = InputBox("適用するスタイル名を入力してください" & vbCrLf & _
"例: Good / Bad / Neutral / Heading 1 / Title", "スタイル名", "Good")
If styleName = "" Then Exit Sub
On Error Resume Next
rng.Style = styleName
If Err.Number <> 0 Then
MsgBox "スタイル「" & styleName & "」が見つかりません", vbCritical, "エラー"
Exit Sub
End If
On Error GoTo ErrorHandler
MsgBox "スタイル「" & styleName & "」を適用しました", vbInformation, "完了"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub
使う場面: 見出し行を選択して「見出し 1」を入力すると、選んだ範囲に見出し用の書式がまとめて付きます。使える名前は[ホーム]→[セルのスタイル]に並んでいるものです(日本語版なら「良い」「見出し 1」など、お使いのExcelの表示どおりに入力します)。存在しない名前を入れたときは、見つからない旨のメッセージが出て止まります。
まとめ
帳票の見出しは、「まとめる」「ほどく」「そろえる」の3つができると扱いやすくなります。MergeCellsFormattingでタイトルを整え、UnmergeCellsFormattingで受け取った表をデータとして使える形にし、SetCellStyleで見た目をそろえる——ここまで読み進めたあなたは、毎月の帳票づくりを仕組みにできる人です。
紹介した3つを含む、VBAマクロを100本、サイトにまとめて公開しています。
