【Word VBA】ミリ単位の精密レイアウトを極める:プロの「表」制御術
こんにちは。業務自動化の世界へようこそ。
「マクロの記録」で生成された冗長なコードに別れを告げ、今日からWordのレイアウトを意のままに操る術を伝授します。
Word VBAにおいて、多くの人が躓くのが「単位」の壁です。Wordは内部的に「ポイント(pt)」を基準に動いていますが、我々が扱う印刷物の指示書は「ミリ(mm)」です。このギャップを埋めることが、プロへの第一歩となります。
—
1. なぜ「ポイント」ではなく「ミリ」なのか?
Wordのオブジェクトモデルでは、`Width`や`Height`プロパティは基本的に「ポイント(1/72インチ)」で返されます。しかし、定規で測ったような厳密な設計図をコードに落とし込む際、いちいち変換計算をしていてはミスが起きます。
ここで知っておくべき魔法の関数が `CentimetersToPoints` です。
- ポイント(pt): コンピュータの計算単位
- ミリ(mm): 人間が納得する物理単位
コードを書く際は、「常に人間が理解できるmmで値を定義し、実行直前にシステム用のptに変換する」という哲学を徹底してください。これがバグを減らす究極の秘訣です。
—
2. 【実践】ミリ単位で制御する表の動的生成
以下のコードは、指定した列幅と行高で表を生成し、セルを結合して数値を流し込む、現場で最も需要のあるパターンです。
Sub CreatePrecisionTable()
Dim doc As Document: Set doc = ActiveDocument
Dim tbl As Table
Dim targetRange As Range
‘ 表を作成(3行3列)
Set targetRange = Selection.Range
Set tbl = doc.Tables.Add(Range:=targetRange, NumRows:=3, NumColumns:=3)
‘ 表の自動調整をOFFにする(これ重要!ONだと幅が勝手に変わります)
tbl.AllowAutoFit = False
‘ セル幅と高さをミリ単位で厳密指定
‘ 1列目を20mm、2列目を50mm、3列目を30mmに設定
tbl.Columns(1).Width = CentimetersToPoints(2.0)
tbl.Columns(2).Width = CentimetersToPoints(5.0)
tbl.Columns(3).Width = CentimetersToPoints(3.0)
‘ 行の高さを固定値で制御(例:15mm)
tbl.Rows.HeightRule = wdRowHeightExactly
tbl.Rows.Height = CentimetersToPoints(1.5)
‘ セルの結合
‘ 1行目の1列目と2列目を結合する
tbl.Cell(1, 1).Merge MergeTo:=tbl.Cell(1, 2)
‘ テキストと数値の流し込み
With tbl.Cell(1, 1).Range
.Text = “項目名:自動レイアウト”
.ParagraphFormat.Alignment = wdAlignParagraphCenter
End With
‘ 終了処理:表の後に改行を入れて見やすくする
tbl.Range.InsertParagraphAfter
End Sub
—
3. 現場で陥りやすい「3つの罠」
このコードを書いていて、必ず一度は遭遇するエラーがあります。これを防げるかどうかが、初級者と中級者の分かれ道です。
罠1:自動調整の暴走
`tbl.AllowAutoFit = True`(初期値)のままだと、文字数に応じてセルの幅が勝手にリサイズされます。「レイアウトを固定したいなら、必ず `AllowAutoFit = False` にする」。これは鉄則です。
罠2:セルの結合は「結合元」に注意
`Merge`メソッドを使う際、どのセルからどのセルへ結合するかを間違えると、インデックスがずれてオブジェクトが見つからなくなります。結合後は、結合先のセル(`tbl.Cell(1, 2)`など)を操作しようとしないよう注意してください。
罠3:範囲選択の罠
`Selection`オブジェクトを多用するのは避けましょう。処理が遅くなるだけでなく、ユーザーが意図しない場所をクリックしただけでマクロがエラーを吐きます。可能な限り `Range` オブジェクトを明示的に指定してください。
—
最後に:自動化は「設計」が9割
プログラミングは書くことよりも、どう動かすかの「設計」が重要です。
まずは今回紹介した `CentimetersToPoints` を使い、定規で測った寸法をそのままコードに書き写してみてください。
「マクロの記録」で吐き出された汚いコードを掃除し、こうして論理的で美しいコードに置き換えていく過程こそ、業務改善の醍醐味です。ここをクリアしたあなたは、もうWord VBAの入り口を完全に突破しています。
次は「セルの背景色を条件付きで変更する」など、さらなるカスタマイズに挑戦してみてください。応援していますよ!
