(Wordマクロ)数値の単位について

Wordマクロで数値を代入するとき、VBAで単位を指定しないと正しい結果を得られないものがあります。このページでは、末尾がToPointsで終わるメソッドについて解説します。

このページで解説する項目は次の通りです。上から順番に解説します。




①WordのVBAにおける単位

WordのVBAで、数値の単位は全部で6種類用意されています。CentimetersToPointsInchesToPoints以外は、Wordでのみ使うことができます。

メソッド 説明
CentimetersToPoints センチメートル単位(1センチ:28.35pt)
InchesToPoints インチ単位(1インチ:72pt)
LinesToPoints 行単位(1行:12pt)
MillimetersToPoints ミリメートル単位(1ミリ:2.85pt)
PicasToPoints パイカ単位(1パイカ:12pt)
PixelsToPoints ピクセル単位

②数値単位の解説

フォントのサイズや、段落の行間(最小値・固定値)などは数値ベタ打ちでポイントに変換されるため、上のメソッドを使う理由はあまりありません。したがって、ここでは数値ベタ打ちでうまく動かないインデント設定を例にあげて解説します。

①インデント設定で数値ベタ打ちした場合

Public Sub Sample1()
'左からのインデントに「10」を設定する
Selection.Paragraphs.LeftIndent = 10
End Sub

<実行結果>

10」と入力して、「3.5mm」という結果になりました。1字分のインデントが4.2mmだと知っている方は、1字分のインデント=12(pt)ということを経験則からご存知だと思います。

では、12ptがどうして1字分になるのでしょう。その答えは、上の表にある「行単位」・「パイカ単位」です。
段落設定でインデント設定をするとき、通常入力している値は、ほぼ行単位・パイカ単位と重なります。

②インデントでパイカ単位で入力した場合

※実行結果は、行単位(LinesToPoints)・パイカ単位(PicasToPoints)ともに同じです。

Public Sub Sample2()
'左からのインデント「2パイカ」を設定する
Selection.Paragraphs.RightIndent = PicasToPoints(2)
End Sub

<実行結果>

実行結果は、ほぼ2字分(8.4mm)になります。

手入力で「2字」と打つ場合に比べて0.1mm分余計右に動くため、組版される場合は、インデント設定はマクロか手入力のどちらかに統一した方がいいでしょう(個人的にはWordを組版ソフトとして使うこと自体に抵抗がありますが……)。字数でインデントを指定したい場合は、CharacterUnitLeft(Right)Indent」を使うという方法があります。詳しくは、インデント設定の仕方を参照してください。

③行間設定を倍数にし、行単位で設定する場合

※実行結果は、行単位(LinesToPoints)・パイカ単位(PicasToPoints)ともに同じです。

Public Sub 開いている文書の行間設定を倍数3にする()
With ActiveDocument.Paragraphs
    .LineSpacingRule = wdLineSpaceMultiple
    .LineSpacing = LinesToPoints(3)
End With
End Sub

<実行結果>

行間設定のうち、「倍数」のみ数値ベタ打ちでは上手く動きません。LinesToPointsまたはPicasToPointsを指定しましょう。




③まとめ

フォントのpt数、行間の固定値、行間の最小値は数値ベタ打ちでOKです。
インデントと行間の倍数はLinesToPointsまたはPicasToPoinsで指定しましょう。
微調整が必要な場合は、CentimetersToPointsInchesToPointsMillimetersToPointsを活用しましょう。
PixelsToPoints(ピクセル単位)の使いみち知っている人がいたら教えてください。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください