こんにちは!業務自動化チームのシニアアーキテクトです。
マクロの記録ボタンを押しただけで満足していませんか?「Wordのファイルを開くたびに、行間がバラバラでレイアウトが崩れている……。これを一発でキレイに整えたい!」実務の現場では、そんなお悩みを本当によく耳にします。
今回は、Word VBAの初学者が絶対に押さえておくべき「段落の行間を固定値(pt)で一括指定し、レイアウトを強制的に統一する技術」を徹底解説します。
ここをクリアすれば、Word VBAのオブジェクト構造の本質がグッと見えてきますよ。さあ、一緒にプロの第一歩を踏み出しましょう!
—
なぜ「行間のバラツキ」は実務で問題になるのか?
複数人がバラバラに作成したWord文書や、Webからコピー&ペーストを繰り返した文書は、行間(段落の間隔)がめちゃくちゃになりがちです。
Wordの標準設定では「1行(1.15行など)」という相対的な行間になっていることが多く、フォントサイズを変えたり、画像を挿入したりすると、予期せぬレイアウト崩れを引き起こします。
これをプロの書類として美しく、かつ厳格に統一するためには、「行間を固定値(ポイント単位:pt)」でガチガチに固めるのが一番の近道です。手作業で全選択して設定し直すなんて、エンジニアのやることではありません。一瞬で終わらせるVBAの魔法をかけましょう。
—
怖くない!Word VBAの基本構造を理解しよう
コードを書く前に、Wordが文書をどう見ているか(オブジェクトモデル)のイメージを共有します。
- Document(文書) > Paragraphs(段落たち) > Paragraph(ひとつの段落)
Word VBAの基本は、「どこに対して(対象)」、「何をしたいのか(操作)」の組み合わせです。今回は「文書の中にあるすべての段落に対して、行間を固定値に設定する」という指示を出します。
—
実践!行間を一括統一するマクロコード
以下のコードをWordのVBAエディタ(Alt + F11 で開けます)に貼り付けて実行してみてください。
Sub FixLineSpacingToFixedPoint()
‘ 変数の宣言(段落を扱うための入れ物を用意します)
Dim targetPara As Paragraph
Dim targetRange As Range
‘ 処理の高速化と画面チラつき防止のおまじない
Application.ScreenUpdating = False
‘ 文書全体の段落をひとつずつループ処理する
For Each targetPara In ActiveDocument.Paragraphs
‘ 【重要】行間モードを「固定値」に設定する
‘ wdLineSpaceExactly は「固定値」を表すWordのお約束(定数)です
targetPara.LineSpacingRule = wdLineSpaceExactly
‘ 【重要】行間の高さを「18ポイント」に強制指定する
‘ PointsToLines または直接ポイント数を指定できます(1pt = 20twips)
targetPara.LineSpacing = Application.PointsToPhotos(18) ‘ ※誤読防止のため次のブロックで正しい書き方を解説
Next targetPara
‘ 画面描画を元に戻す
Application.ScreenUpdating = True
‘ 完了メッセージ
MsgBox “文書内のすべての行間を「固定値 18pt」に統一しました!”, vbInformation, “処理完了”
End Sub
正しい行間ポイント数の指定方法(訂正版スニペット)
先ほどのコードで少し難しく書いた部分を、実務で最も直感的で安全な書き方に書き換えます。Word VBAではポイント数をそのまま代入するか、専用の関数を使います。
Sub FixLineSpacing_Clean()
Dim p As Paragraph
‘ 念のため画面更新を停止
Application.ScreenUpdating = False
For Each p In ActiveDocument.Paragraphs
‘ 1. 行間ルールを「固定値 (wdLineSpaceExactly = 4)」に設定
p.LineSpacingRule = 4
‘ 2. 行間を「20ポイント」に指定(数値は好みに合わせて変更可能)
p.LineSpacing = PtToPoints(20) ‘ もしくは単に 20 と書いても動作しますが、明示的にPtを指定します
Next p
Application.ScreenUpdating = True
MsgBox “行間の統一が完了しました。”, vbInformation
End Sub
※実務のTips:`PtToPoints` や `LinesToPoints` といったWord標準の変換関数を使うと、ミリ単位やポイント単位の計算ミスを防げます。直接 `p.LineSpacing = 28.35`(1cmに相当するpt)のように記述することも可能です。
—
初学者が必ずハマる「3つの罠」と回避策
マクロの記録やネットのコードを真似したときに、初心者が必ず直面する壁があります。ここを知っておくだけで、エラーに怯える時間がゼロになります。
1. 「表(テーブル)」の中の段落でエラーになる
文書内に表がある場合、`For Each p In ActiveDocument.Paragraphs` を回すと、表セル内の段落に対しても処理が走ります。表の中はレイアウトが特殊なため、意図しない崩れを起こすことがあります。
- 対策: 本文だけに適用したい場合は、ストーリー(セクション)を絞るか、エラーハンドリング(`On Error Resume Next`など)を適切に挟む実務的配慮が必要です。
2. 「見出し」の行間まで潰してしまう
本文と同じ「18pt固定」を見出しタイトルに適用してしまうと、文字が重なったりバランスが崩れたりします。
- 対策: 本文のスタイル(例: “標準” や “Normal”)だけに絞って処理するか、見出し以外の段落を判定する条件分岐(`If p.Style = “標準” Then …`)を入れましょう。
3. 画面更新(ScreenUpdating)を忘れて動作が重くなる
ページ数が多い長文(100ページ超えなど)でこのマクロを走らせると、画面がパチパチと点滅しながら非常に遅くなります。
- 対策: コードの最初で `Application.ScreenUpdating = False` にし、最後で `True` に戻すおまじないを必ずセットで記述してください。これだけで実行速度が劇的に変わります。
—
応用:特定のスタイルだけを一括変換する(プロの技)
すべての段落を無理やり変えるのではなく、「標準」スタイルの段落だけをターゲットにする、より洗練されたコードをプレゼントします。現場でそのままコピーして使ってください。
Sub ApplyFixedSpacingToNormalStyleOnly()
Dim p As Paragraph
Dim count As Long
count = 0
Application.ScreenUpdating = False
For Each p In ActiveDocument.Paragraphs
‘ 段落のスタイルが「標準(Normal)」であるものだけを対象にする
If p.Style = “標準” Or p.Style = “Normal” Then
p.LineSpacingRule = wdLineSpaceExactly
p.LineSpacing = 22 ‘ 少しゆったりめの22ptに設定
count = count + 1
End If
Next p
Application.ScreenUpdating = True
MsgBox count & “個の「標準」段落の行間を22ptに統一しました。”, vbInformation
End Sub
—
まとめ:ここをクリアすれば、Word VBAの基本はバッチリ!
今回は、段落の行間を固定値(pt)で一括指定し、文書のレイアウトを強制的に統一する手法を解説しました。
- `LineSpacingRule` でルールの種類(固定値など)を決める。
- `LineSpacing` で具体的な高さをポイントで指定する。
- `Application.ScreenUpdating` で高速化を図る。
この3つのポイントさえ押さえておけば、Wordの書式設定で困ることはもうありません。手作業によるコピペ地獄から解放され、ぜひスマートな自動化ライフを手に入れてください。
あなたの業務自動化の旅を、これからも応援しています!
