Word VBAの「行間」を制する者だけが、帳票レイアウトの地獄から脱出できる
Wordのレイアウト崩れに悩まされたことはないだろうか。
「なぜかページ末尾で数行だけ改ページされる」「フォントサイズを変えた瞬間に全体がガタガタになる」。これらはすべて、Wordのデフォルト設定である「行間:1行」という曖昧なグリッド設定が引き起こす悲劇だ。
ドキュメントの品質を担保し、業務自動化の先にある「堅牢なドキュメント管理」を実現したいなら、行間を「固定値(pt)」で制御するのは必須の作法である。本稿では、初心者が陥りがちな罠を回避し、プロフェッショナルなレベルでレイアウトを統制するVBAの極意を伝授する。
—
1. なぜ「1行」設定がビジネスの敵なのか
Wordのデフォルト「1行」は、文字のフォントサイズや環境(フォントのメトリクス)によって柔軟に変化する。これは一見親切だが、「文書の再現性」という観点では最悪だ。
- フォント依存の罠: 環境によって微妙に高さが異なり、PC間で開くとレイアウトがズレる。
- グリッド依存の罠: 「文字グリッド線に合わせる」設定が有効だと、意図せぬ行間が強制される。
業務自動化ツールを開発する我々にとって、最も重要なのは「誰がいつ開いても同じ行数、同じ配置で表示されること」だ。そのためには、`LineSpacingRule` を `wdLineSpaceExactly` に固定し、`LineSpacing` をポイント単位で指定するしかない。
—
2. 堅牢なコード設計:プロの現場で使うべきアプローチ
単にコードを書くのではなく、「対象をどう選ぶか」「どうエラーを回避するか」を設計するのがチーフアーキテクトの視点だ。
以下のコードは、文書内の全段落を対象に、特定の行間(例: 18pt)を強制適用する堅牢なプロシージャである。
‘ ========================================================
‘ 概要:文書内の全段落の行間を固定値(pt)に統一する
‘ 設計意図:意図しない書式の混在を排除し、再現性を担保する
‘ ========================================================
Public Sub SetDocumentLineSpacing()
Dim para As Paragraph
Dim targetPt As Single
‘ 行間を18ptに設定(用途に合わせて変更してください)
targetPt = 18
‘ 画面更新を停止し、処理速度を向上させる(大規模文書では必須)
Application.ScreenUpdating = False
On Error GoTo ErrorHandler
For Each para In ActiveDocument.Paragraphs
With para.Format
‘ 1. グリッド線に合わせる設定を解除(これ重要!)
.AutoAdjustRightIndent = True
.DisableLineHeightGrid = True ‘ これをTrueにしないと固定値が効かない
‘ 2. 行間を「固定値」に設定
.LineSpacingRule = wdLineSpaceExactly
‘ 3. 行間をpt単位で指定
.LineSpacing = targetPt
End With
Next para
MsgBox “文書全体の行間を ” & targetPt & “pt に統一しました。”, vbInformation
ExitPoint:
Application.ScreenUpdating = True
Exit Sub
ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
Resume ExitPoint
End Sub
—
3. 実務で「詰まない」ための3つの知見
このコードを運用する際、以下の3点だけは頭に叩き込んでおいてほしい。
① `DisableLineHeightGrid` の重要性
多くの初心者は `LineSpacingRule` だけをいじって「反映されない」と嘆く。Wordには「グリッド線に合わせる」という強力な強制力が存在する。これを `True`(無効化)にしなければ、いくら数値を入力してもWordは頑固にグリッド優先の動きをする。
② 大規模文書でのパフォーマンス
`ActiveDocument.Paragraphs` をループするのは、文書が数千ページに及ぶと低速になる可能性がある。その場合は、`Range`オブジェクトを使って一括置換的に処理する手法(`Find/Replace`を利用した書式置換)への切り替えを検討せよ。
③ データベース連携時の落とし穴
もしあなたがExcelや外部DBからWordのテンプレートに流し込むツールを作っているなら、「スタイル(Style)」を先に定義しておくことを強く勧める。VBAで一つひとつ段落を操作するのは、修正時のメンテナンスコストが高い。
「段落書式を直接いじる」のではなく、「標準スタイルをVBAで上書きする」設計の方が、Wordの仕様(スタイル優先の原則)に忠実であり、圧倒的に堅牢だ。
—
まとめ:エンジニアとして、美学あるコードを
Wordのレイアウト制御は「職人技」と思われがちだが、本質は「Wordという仕様の深い理解」にある。
「行間がズレる」という事象に対して、場当たり的に手で修正するのではなく、コードで一律に統制する。この姿勢こそが、自動化エンジニアとしての第一歩だ。今回紹介したコードは、あなたの自動化ツールを一段上のレベルへと引き上げるだろう。
さあ、コードをコピーして、あなたのドキュメントから「謎のズレ」を完全に排除してほしい。
