エクセルVBAで使用するコードの備忘録。VBAでWordファイルを操作しファイル内の表の体裁(フォント、高さ、背景色など)を変更するコード。ExcelからWordファイルに表を貼り付けた場合などには、表の幅などの体裁が崩れるケースが多いので、そのような場合にはVBAから体裁を整える必要が出てきます。一番最後にコピペで使用可能なサンプルコードを記載してあります。
Wordファイルを開く
Wordファイルを開くにはワードファイルを操作するためのオブジェクトを作成する必要があります。作成する際のコードの書き方は参照設定を使う場合とそうでない場合で異なりますが(詳しくはこちらをご覧ください)、基本的には参照設定を使うことをお勧めします。
参照設定は以下のように、VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Word XX.X Object Library」にチェックを入れることで設定できます(XX.X部分の数字はバージョンによって変わります)。
パスワード付ファイルを開く方法などWordファイルを開く方法についてはこちらでも記載していますので詳しく知りたい場合はご参照ください。
Word文書内の表を取得する
Word文書内に含まれる表(Table)はWord.Documentオブジェクト下のTablesオブジェクトで管理されています。文書内に複数の表が含まれる可能性が考えられるのでTablesオブジェクトは配列になっています。そのためIndex番号を使って何番目の表なのかを指定してやる必要があります。
[Word.Documentオブジェクト].Tables([Index])
表の高さ・幅を変更する
表の高さや幅を変更する際はTables下にある行や列全体を示すRowsオブジェクト、Columnsオブジェクトを使用します。これらオブジェクトのSetHeightやSetWidthメソッドを使えば、表の高さや幅を指定することが可能です。
なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。
'--- objDocはWord.Documentオブジェクトです ---'
'--- 表全体を変更する場合 ---'
Call objDoc.Tables([Index]).Rows.SetHeight([高さ], wdRowHeightExactly)
Call objDoc.Tables([Index]).Columns.SetWidth([幅], wdAdjustNone)
'--- 指定した行・列だけ変更する場合 ---'
Call objDoc.Tables([Index]).Rows([行番号]).SetHeight([高さ], wdRowHeightExactly)
Call objDoc.Tables([Index]).Columns([列番号]).SetWidth([幅], wdAdjustNone)
ちなみにSetHeightやSetWidthメソッドの第二引数についてはMicrosoftのページをご参照ください。
フォントを変更する
表内のフォントを変更するにはRangeオブジェクト下のFontオブジェクトから行います。表全体、指定列のみ、指定行のみ、指定セルのみ、すべて可能ですが、Wordの仕様上で指定列のみ同一のフォントに変更するのは少し面倒になっています。
選択可能な文字色についてはマイクロソフトのこちらのページをご参照ください。
こちらも、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。
'--- objDocはWord.Documentオブジェクトです ---'
'--- 表全体を変更する場合 ---'
objDoc.Tables([Index]).Range.Font.Size = [フォントサイズ]
objDoc.Tables([Index]).Range.Font.TextColor = [文字色]
objDoc.Tables([Index]).Range.Font.Bold = [太字(True or False)]
objDoc.Tables([Index]).Range.Font.Italic = [斜体(True or False)]
objDoc.Tables([Index]).Range.Font.Underline = [下線(True or False)]
'--- 指定した行だけ変更する場合 ---'
objDoc.Tables([Index]).Rows([行番号]).Range.Font.Size = [フォントサイズ]
objDoc.Tables([Index]).Rows([行番号]).Range.Font.TextColor = [文字色]
objDoc.Tables([Index]).Rows([行番号]).Range.Font.Bold = [太字(True or False)]
objDoc.Tables([Index]).Rows([行番号]).Range.Font.Italic = [斜体(True or False)]
objDoc.Tables([Index]).Rows([行番号]).Range.Font.Underline = [下線(True or False)]
'--- 指定した列だけ変更する場合 ---'
Dim i As Long
For i = 1 To objDoc.Tables([Index]).Rows.Count
objDoc.Tables([Index]).Cell(i, [列番号]).Range.Font.Size = [フォントサイズ]
objDoc.Tables([Index]).Cell(i, [列番号]).Range.Font.TextColor = [文字色]
objDoc.Tables([Index]).Cell(i, [列番号]).Range.Font.Bold = [太字(True or False)]
objDoc.Tables([Index]).Cell(i, [列番号]).Range.Font.Italic = [斜体(True or False)]
objDoc.Tables([Index]).Cell(i, [列番号]).Range.Font.Underline = [下線(True or False)]
Next i
'--- 指定したセルだけ変更する場合 ---'
objDoc.Tables([Index]).Cell([列番号], [列番号]).Range.Font.Size = [フォントサイズ]
objDoc.Tables([Index]).Cell([列番号], [列番号]).Range.Font.TextColor = [文字色]
objDoc.Tables([Index]).Cell([列番号], [列番号]).Range.Font.Bold = [太字(True or False)]
objDoc.Tables([Index]).Cell([列番号], [列番号]).Range.Font.Italic = [斜体(True or False)]
objDoc.Tables([Index]).Cell([列番号], [列番号]).Range.Font.Underline = [下線(True or False)]
背景色を変更する
背景色はShadingオブジェクトのBackgroundPatternColorから設定します。選択可能な色については上記のフォントと同じマイクロソフトのこちらのページをご参照ください。
こちらも、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。
'--- objDocはWord.Documentオブジェクトです ---'
'--- 表全体を変更する場合 ---'
objDoc.Tables([Index]).Range.Shading.BackgroundPatternColor = [背景色]
'--- 指定した行だけ変更する場合 ---'
objDoc.Tables([Index]).Rows([行番号]).Range.Shading.BackgroundPatternColor = [背景色]
'--- 指定した列だけ変更する場合 ---'
Dim i As Long
For i = 1 To objDoc.Tables([Index]).Rows.Count
objDoc.Tables([Index]).Cell(i, [列番号]).Range.Shading.BackgroundPatternColor = [背景色]
Next i
'--- 指定したセルだけ変更する場合 ---'
objDoc.Tables([Index]).Cell([列番号], [列番号]).Range.Shading.BackgroundPatternColor = [背景色]
サンプルコード
下記のサンプルコードでは、開いたワード文書内の表全体を指定した書式に変更するようにしてあります。
こちらも、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。
Public Sub ChangeTableFormat()
'--- Wordのアプリケーションオブジェクト ---'
Dim objWord As Word.Application
Set objWord = New Word.Application
objWord.Visible = True
'--- 開くワードファイルのパス ---'
Dim docPath As String
docPath = "[ワードファイルのパス]"
'--- ワードドキュメントを開く ---'
Dim objDoc As Word.Document
Set objDoc = objWord.Documents.Open(docPath)
'--- 幅と高さを調整 ---'
Call objDoc.Tables([Index]).Rows.SetHeight([高さ], wdRowHeightExactly)
Call objDoc.Tables([Index]).Columns.SetWidth([幅], wdAdjustNone)
'--- フォントを調整 ---'
objDoc.Tables([Index]).Range.Font.Size = [フォントサイズ]
objDoc.Tables([Index]).Range.Font.TextColor = [文字色]
objDoc.Tables([Index]).Range.Font.Bold = [太字(True or False)]
objDoc.Tables([Index]).Range.Font.Italic = [斜体(True or False)]
objDoc.Tables([Index]).Range.Font.Underline = [下線(True or False)]
'--- 背景色を変更 ---'
objDoc.Tables([Index]).Range.Shading.BackgroundPatternColor = [背景色]
End Sub