Excel VBA 逆引き集 | 実務テンプレ完全版(超再利用部品) – エクセル方眼自動整形

Excel VBA
スポンサーリンク

ねらい:どんなシートでも一発で「方眼紙レイアウト」にそろえる

「エクセル方眼」は好き嫌いが分かれますが、社内の帳票や申請書が全部エクセル方眼で作られている現場も多いですよね。
問題は、毎回「列幅を 1.2 にして、行の高さを 15 にして、枠線を引いて…」を手作業でやっていることです。

ここで目指すのは、次のような状態です。

シートを選ぶか範囲を選ぶ。
マクロを実行する。
指定した範囲が「方眼紙」っぽいマス目にそろい、罫線・フォント・印刷設定まで一気に整う。

この「エクセル方眼自動整形」をテンプレ化しておけば、
新しい帳票を作るときも、もらったファイルを“社内標準の方眼”に合わせるときも、ボタン一つで済むようになります。


基本設計:どの範囲を「方眼」にするかを決める

方眼にする単位を決める考え方

まず決めるべきは、「どこまでを方眼にするか」です。
よくあるパターンは二つです。

シート全体を方眼にする。
A1 から例えば AO80 までなど、「帳票で使う想定の範囲だけ」を方眼にする。

シート全体を方眼にすると、後から列を増やしたときも見た目がそろっていて楽ですが、列数が多いと処理が重くなります。
帳票用なら「横 40~60 列、縦 50~100 行」くらいの範囲を決め打ちしておくのが現実的です。

ここでは例として、「A1:AO80 を方眼にする」テンプレを作り、その後で「選択範囲を方眼にする」版も紹介します。


方眼設定ユーティリティ:列幅・行高・罫線・フォントを一括でそろえる

シートの一部を「方眼」にする基本 Sub

' ModHogan_Base.bas
Option Explicit

Public Sub MakeHoganBlock(ByVal ws As Worksheet, _
                          ByVal topLeft As String, _
                          ByVal bottomRight As String, _
                          Optional ByVal colWidth As Double = 1.2, _
                          Optional ByVal rowHeight As Double = 15, _
                          Optional ByVal fontName As String = "Meiryo UI", _
                          Optional ByVal fontSize As Double = 9)
    Dim rng As Range
    Set rng = ws.Range(topLeft, bottomRight)
    
    With rng
        .ColumnWidth = colWidth
        .RowHeight = rowHeight
        
        .Font.Name = fontName
        .Font.Size = fontSize
        
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlVAlignCenter
        .WrapText = True
        
        With .Borders
            .LineStyle = xlContinuous
            .Weight = xlHairline
            .Color = RGB(200, 200, 200)
        End With
    End With
End Sub
VB

ここが「方眼紙化」の核になります。

列幅と行高を固定値にそろえることで、セルがほぼ正方形になります。
フォントと中央揃え、折り返しを一括で設定することで、「どこに文字を入れても帳票っぽく見える」状態になります。
罫線は Hairline(極細)+薄いグレーにしておくと、印刷しても主張しすぎず、でもマス目はちゃんと見えるバランスになります。

列幅 1.2、行高 15 はあくまで一例です。
画面解像度やプリンタによって「ちょうどいい正方形」は微妙に変わるので、現場で一度調整してから値を決めてください。


エクセル方眼自動整形:シート全体版と選択範囲版

シート全体を「標準方眼」にするマクロ

Public Sub MakeSheetHogan_All()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    Dim lastCol As Long, lastRow As Long
    lastCol = ws.Columns.Count
    lastRow = ws.Rows.Count
    
    Dim targetCol As Long, targetRow As Long
    targetCol = 60
    targetRow = 80
    
    If targetCol > lastCol Then targetCol = lastCol
    If targetRow > lastRow Then targetRow = lastRow
    
    Call MakeHoganBlock(ws, "A1", ws.Cells(targetRow, targetCol).Address)
    
    ws.Activate
    ActiveWindow.DisplayGridlines = False
End Sub
VB

このマクロは、アクティブシートの A1 から 60列×80行分を方眼にします。
グリッド線も消しているので、「方眼罫線だけが見える」状態になります。

重要なのは、「全部の列・行」ではなく「使う想定の範囲だけ」に絞っていることです。
全列・全行を方眼にすると、ファイルが重くなり、スクロールもつらくなります。

選択範囲だけを「方眼」にするマクロ

Public Sub MakeSelectionHogan()
    Dim rng As Range
    On Error Resume Next
    Set rng = Selection
    On Error GoTo 0
    
    If rng Is Nothing Then
        MsgBox "方眼にしたい範囲を選択してから実行してください。", vbInformation
        Exit Sub
    End If
    
    Call MakeHoganBlock(rng.Worksheet, rng.Cells(1, 1).Address, rng.Cells(rng.Rows.Count, rng.Columns.Count).Address)
    
    rng.Worksheet.Activate
    ActiveWindow.DisplayGridlines = False
End Sub
VB

こちらは、「ここだけ方眼にしたい」というときに使う版です。
帳票の一部だけ方眼にして、他の部分は普通の表にする、という使い方もできます。


方眼+帳票の“型”を作る:タイトル行・入力欄・印刷設定まで一気に整える

方眼ブロックの上に「タイトル行」と「入力欄」を自動配置する例

方眼にしただけだと、まだ「ただのマス目」です。
よくある帳票の形に一気に近づけるテンプレも用意しておくと便利です。

Public Sub MakeHoganFormTemplate()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    Call MakeHoganBlock(ws, "A1", "AO80", 1.2, 15, "Meiryo UI", 9)
    
    With ws.Range("A1:AO3")
        .Merge
        .Value = "〇〇申請書"
        .Font.Size = 14
        .Font.Bold = True
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlVAlignCenter
    End With
    
    ws.Range("B5:D5").Merge
    ws.Range("B5").Value = "部署"
    ws.Range("E5:J5").Merge
    
    ws.Range("B6:D6").Merge
    ws.Range("B6").Value = "氏名"
    ws.Range("E6:J6").Merge
    
    ws.Range("B7:D7").Merge
    ws.Range("B7").Value = "日付"
    ws.Range("E7:J7").Merge
    
    ws.Range("B5:B7").Font.Bold = True
    ws.Range("B5:B7").HorizontalAlignment = xlRight
    
    With ws.PageSetup
        .Orientation = xlPortrait
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .LeftMargin = Application.CentimetersToPoints(1.0)
        .RightMargin = Application.CentimetersToPoints(1.0)
        .TopMargin = Application.CentimetersToPoints(1.5)
        .BottomMargin = Application.CentimetersToPoints(1.5)
        .PrintArea = ws.Range("A1:AO80").Address
    End With
    
    ActiveWindow.DisplayGridlines = False
End Sub
VB

このマクロを実行すると、次のような“ひな形”が一瞬でできます。

A1:AO3 が大きく結合され、「〇〇申請書」というタイトルが中央にドンと出る。
B5~B7 に「部署」「氏名」「日付」のラベル、右側に入力欄。
全体は方眼で、印刷設定も A4 縦 1ページに収まるように調整済み。

ここで大事なのは、「方眼ブロック」と「帳票の構造」を分けて考えることです。
方眼ブロックは MakeHoganBlock で作り、その上に「どんな帳票にしたいか」を別の Sub で積み上げるイメージです。


例題:既存の“普通の表”を方眼帳票に変換する

元の表を方眼ブロックに移し替える流れ

例えば、こんなシナリオを考えます。

RawData シートに、普通の表形式で申請データがある。
その中の1行を「申請書の帳票」として出力したい。
帳票は方眼レイアウトで、タイトルやラベルも決まっている。

このときの流れはこうなります。

方眼帳票用のシート(Form)を用意しておく。
MakeHoganFormTemplate を Form シートで実行して、ひな形を作る。
RawData の1行目のデータを、Form シートの部署・氏名・日付欄に転記するマクロを書く。

転記部分のコード例は次のようになります。

Public Sub FillHoganFormFromRow(ByVal srcRow As Long)
    Dim wsSrc As Worksheet, wsForm As Worksheet
    Set wsSrc = Worksheets("RawData")
    Set wsForm = Worksheets("Form")
    
    wsForm.Range("E5").Value = wsSrc.Cells(srcRow, 1).Value
    wsForm.Range("E6").Value = wsSrc.Cells(srcRow, 2).Value
    wsForm.Range("E7").Value = wsSrc.Cells(srcRow, 3).Value
End Sub
VB

これを組み合わせると、

MakeHoganFormTemplate でひな形を作る。
FillHoganFormFromRow でデータを差し込む。
必要なら PDF 出力する。

という「方眼帳票生成」の流れが完成します。


落とし穴と対策:エクセル方眼ならではの注意点を押さえる

列幅・行高を変えると「方眼」が崩れる

方眼にした後で、手作業で列幅や行高を変えると、当然ながら「方眼」ではなくなります。
現場ではよく、「ここだけ文字が入らないから列を広げちゃおう」ということが起きます。

これを防ぐには、運用ルールとして

文字が入らないときは、セル結合で横に広げる。
列幅・行高は基本いじらない。どうしても変えたいときは、テンプレ側の値を変える。

という方針を共有しておくことが大事です。

セル結合を多用すると後で集計・コピーがつらくなる

方眼+セル結合は、見た目はきれいですが、後からデータを集計したり、別シートにコピーしたりするときに邪魔になります。
「見た目の帳票」と「データの表」は分ける、という考え方を持っておくと楽になります。

データは普通の表で持ち、帳票は方眼+結合セルで作る。
帳票に出したいときだけ、データから方眼帳票に転記する。

この二段構えにしておくと、「方眼のせいで仕事がしづらい」がかなり減ります。

方眼範囲を広げすぎるとファイルが重くなる

A1 から XFD1048576 まで全部方眼にする、というのは絶対にやめた方がいいです。
罫線や書式は「セルごとの情報」なので、全セルに設定するとファイルサイズも処理時間も一気に跳ね上がります。

帳票で使う範囲を決め打ちする。
どうしても広い範囲が必要なら、それでも「せいぜい 100列×200行」くらいに抑える。

この感覚を持っておくと、方眼を使ってもファイルが破綻しにくくなります。

印刷時のズレは「プリンタ依存」もあると理解しておく

列幅 1.2、行高 15 で「ほぼ正方形」に見えても、プリンタやドライバによっては微妙にズレます。
完全な“数学的な正方形”を求めるより、「見た目として違和感がない」レベルで妥協するのが現実的です。

一度、実際に印刷してみて、
「もう少し列幅を広げた方がいい」「行高を少し下げた方がいい」などを調整し、
その値をテンプレに固定してしまうのが一番早いです。


まとめ:方眼そのものも「テンプレ化」して、感覚ではなく“型”でそろえる

エクセル方眼自動整形の本質は、「人の感覚で毎回いじる」のをやめて、

どの範囲を
どんな列幅・行高で
どんな罫線・フォントで
どんな印刷設定で

そろえるかを、VBA のテンプレとして固定してしまうことです。

MakeHoganBlock で方眼ブロックを作る。
MakeSheetHogan_All や MakeSelectionHogan で適用範囲を選べるようにする。
帳票用には MakeHoganFormTemplate のような「方眼+タイトル+入力欄」の型を用意する。

ここまで作っておけば、「方眼で作って」と言われても、
もうイライラしながら列幅をいじる必要はなくなります。

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