導入: なぜVBAでWordの「縦書き」を制御するのか
実務において、Wordは報告書や契約書などの文書作成に欠かせないツールです。しかし、定型的なビジネス文書を大量に作成する際、手作業で「縦書き」設定や、半角数字を読みやすくする「縦中横」を適用するのは非常に手間がかかります。VBAを活用してこれらの設定を自動化すれば、ヒューマンエラーを排除し、業務効率を劇的に向上させることが可能です。今回は、Wordのページ設定をVBAから制御するテクニックを解説します。
基礎知識: Wordの縦書きと「縦中横」の仕組み
Wordの文書は、標準では「横書き」ですが、セクション単位で「縦書き」に切り替えることができます。ここで重要になるのが、縦書きの中に半角数字やアルファベットが混ざった場合の処理です。これらを縦書きの中で横向きに表示させ、読みやすくする機能を「縦中横(たてちゅうよこ)」と呼びます。VBAでは、WordのPageSetupオブジェクトやRangeオブジェクトを操作することで、これらのレイアウトを自在に操ることができます。
実装/解決策: VBAによる制御のポイント
WordのVBA操作において、縦書き設定はPageSetupオブジェクトのTextOrientationプロパティを使用します。また、特定の文字列に対して縦中横を適用するには、RangeオブジェクトのHorizontalInVerticalプロパティをTrueに設定します。これにより、コードベースで文書のレイアウトを完全にコントロールできるようになります。
サンプルプログラム: 縦書き文書を作成し「縦中横」を適用する
このコードは、新規Word文書を作成し、縦書きに設定した後、特定の文字列に縦中横を適用する実用的なサンプルです。
Sub SetupVerticalDocument()
Dim wdApp As Object
Dim wdDoc As Object
Dim rng As Object
‘ Wordアプリケーションを起動
Set wdApp = CreateObject(“Word.Application”)
wdApp.Visible = True
Set wdDoc = wdApp.Documents.Add
‘ 1. 文書全体を縦書きに設定
With wdDoc.PageSetup
‘ wdTextOrientationVerticalFarEast を指定して縦書きにする
.TextOrientation = 3
End With
‘ 2. テキストを入力
wdDoc.Content.Text = “平成30年度報告書” & vbCrLf & “担当:佐藤”
‘ 3. 特定の文字列(30)に「縦中横」を適用
‘ 平成30年度の「30」の位置を特定して範囲指定
Set rng = wdDoc.Range(Start:=2, End:=4)
‘ 縦中横を有効化
rng.HorizontalInVertical = True
MsgBox “縦書き文書の作成と縦中横の設定が完了しました。”, vbInformation
End Sub
※注意:Wordの定数(wdTextOrientationVerticalFarEast等)を外部から参照する場合、上記のように数値(3)で直接指定するか、Wordの参照設定を行うとスムーズです。
応用・注意点: 現場で役立つ補足
1. セクション区切りの重要性
文書全体ではなく、「一部だけ縦書きにしたい」というケースも多いはずです。その場合は、RangeオブジェクトのSectionプロパティを使用して、特定のセクションのみを縦書きに変更してください。
2. 縦中横の解除方法
プログラムで縦中横を解除したい場合は、対象のRangeに対して「rng.HorizontalInVertical = False」を実行するだけで元に戻ります。
3. バグ回避のコツ
縦中横を適用する際、範囲指定(Start/End)を誤ると意図しない文字列が変換されます。実務では「Findオブジェクト」を使って、対象の文字列を検索し、そのRangeに対して設定を適用するように組むと、より堅牢なプログラムになります。
これらの機能を組み合わせれば、複雑な文書作成業務もワンクリックで完了できるようになります。ぜひご自身の環境でお試しください。
