Word VBA Tips by pPoy
トップへ←Top   メニューへ←Menu

Word VBA Word VBA 基礎: 表の使用方法2 《Columns, Rows, Cells》
(Word2002, Word2003)
Word VBA で、表の各オブジェクトに関する使用する方法をまとめてみました。

以下は、Word VBA の表に関連する基本的なオブジェクトの構造です。

TablesWord 文書内、選択範囲、指定範囲のすべての表
Table1 つの表
−Columns選択範囲、指定範囲、表のすべての列
−Column表の列
−−Cells 表の列、行、選択範囲、指定範囲に含まれるすべてのセル
−−Cell 表のセル
−Rows選択範囲、指定範囲、表のすべての行
−Row表の行
−−Cells 表の列、行、選択範囲、指定範囲に含まれるすべてのセル
−−Cell 表のセル
−Bordersオブジェクトの全ての罫線 (引数の定数によって罫線の種類が区別される)
−Borderオブジェクトの罫線

≪1.列に対する処理・・・Columns≫
・Columns コレクションの取得

Sub docTest_Columns1()
    Dim cnt As Variant
    cnt = ActiveDocument.Tables(1).Columns.Count
    MsgBox "1番目の表には、全部で " & cnt & " 個の列があります"
End Sub
※ このコードを実行すると、本文の最初の表の列の数が表示されます。
・表に列を追加する

Sub docTest_Columns2()
    Dim myTable As Table
    If ActiveDocument.Tables.Count >= 1 Then
        Set myTable = ActiveDocument.Tables(1)
        myTable.Columns.Add BeforeColumn:=myTable.Columns(1)
        myTable.Columns.DistributeWidth
    End If
End Sub
※ このコードを実行すると、最初の表の先頭に列を追加します。
  その後全ての列幅を等幅に設定します。
・インデックスで列を区別する

Sub docTest_Columns3()
    ActiveDocument.Tables(1).Columns(1).Select
End Sub
※ このコードを実行すると、最初の表の1列目を全て選択します。
・列をループする (各列に網掛けを設定する)

Sub docTest_Columns4()
    Dim myTable As Table
    Dim col As Column
    Dim i As Long
    Set myTable = ActiveDocument.Tables(1)
    i = 100
    For Each col In myTable.Columns
        col.Shading.Texture = i
        i = i + 100
    Next
End Sub
※ このコードを実行すると、最初の表の各列に対して順番に、濃さの違う網掛けを設定します。
  表の列数が多いと真っ黒になって大変なことになるかも知れません。。。

※ 表は、全行の列数が同一である必要があります。 (凸凹の表ではエラーになります。)
・現在選択中の列番号を取得する

Sub docTest_Columns5()
    If Selection.Information(wdWithInTable) = True Then
        Selection.Columns(1).Select
        MsgBox "列 " _
            & Selection.Information(wdStartOfRangeColumnNumber)
    End If
End Sub
※ このコードを実行すると、現在選択中の箇所がテーブルだった場合、
  選択範囲内の左端の列を選択してから、その列がテーブル内の何列目かを表示します。

※ Information プロパティ はかなり便利です。
この頁のTOPへTop
≪2.行に対する処理・・・Rows≫
・Rows コレクションの取得

Sub docTest_Rows1()
    Dim cnt As Variant
    cnt = ActiveDocument.Tables(1).Rows.Count
    MsgBox "1番目の表には、全部で " & cnt & " 行あります"
End Sub
※ このコードを実行すると、行の数が表示されます。
・表に行を追加する

Sub docTest_Rows2()
    If Selection.Information(wdWithInTable) = True Then
        Selection.Rows.Add BeforeRow:=Selection.Rows(1)
    End If
End Sub
※ このコードを実行すると、選択範囲の先頭行の上に、1行追加されます。
・表の全行を中央揃えにする→表を中央に配置する

Sub docTest_Rows3()
    ActiveDocument.Tables(1).Rows.Alignment = wdAlignRowCenter
End Sub
※ このコードを実行すると、最初の表の全ての行を中央に配置します。
  結果的に、表が中央に配置されます。
・行を削除する

Sub docTest_Rows4()
    ActiveDocument.Tables(1).Rows(2).Delete
End Sub
※ このコードを実行すると、最初の表の2行目が削除されます。
この頁のTOPへTop
≪3.セルに対する処理・・・Cells
・Cells コレクションの取得

Sub docTest_Cells1()
    Dim cnt As Variant
    cnt = Selection.Rows(1).Cells.Count
    MsgBox "この行には、全部で " & cnt & " 個のセルがあります"
End Sub
※ このコードを実行すると、表の中で選択されている行内のセルの数が表示されます。
・セル幅変更

Sub docTest_Cells2()
    ActiveDocument.Tables(1).Rows(1).Cells.Width = 30
End Sub
※ このコードを実行すると、先頭行のみセルの幅を 30 ポイントに設定します。
・セルの挿入

Sub docTest_Cells3()
    Dim myTable As Table
    Set myTable = ActiveDocument.Tables(1)
    myTable.Range.Cells.Add BeforeCell:=myTable.Cell(1, 1)
End Sub
※ このコードを実行すると、表の左上肩のセルの左側にセルを追加します。
  追加された結果、他のセルが右にずれて飛び出します。
・指定したセルに書式設定

Sub docTest_Cells4()
    Dim myCell As Cell
    Set myCell = ActiveDocument.Tables(1).Cell(Row:=1, Column:=2)
    myCell.Shading.Texture = wdTexture20Percent
End Sub
※ このコードを実行すると、先頭行の 2 番目のセルに網かけを設定します。
・セルの結合

Sub docTest_Cells5()
    Dim myTable As Table
    Dim myRange As Range
    Set myTable = ActiveDocument.Tables(1)
    Set myRange = ActiveDocument.Range(myTable.Cell(1, 1) _
        .Range.Start, myTable.Cell(1, 2).Range.End)
    myRange.Cells.Merge
End Sub
※ このコードを実行すると、先頭行の 左上の 2 つのセルが結合されます。
※ 結合前に入力されていた値はそのまま残ります。
・セルの行番号と列番号を表示

Sub docTest_Cells6()
    If Selection.Information(wdWithInTable) = True Then
        With Selection
            MsgBox "セル " & .Information(wdStartOfRangeRowNumber) _
                & ", " & .Information(wdStartOfRangeColumnNumber)
        End With
    End If
End Sub
※ このコードを実行すると、現在選択中のセルの、行番号と列番号が表示されます。
※ 複数セルが選択されている場合は、選択されているセルの左上端のセルの番号を表示します。
・セルの分割

Sub docTest_Cells7()
    ActiveDocument.Tables(1).Cell(1, 1).Split NumColumns:=2
End Sub
※ このコードを実行すると、1番目の表の、最初のセル (左上端) が2つに分割されます。


この頁のTOPへTop
【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。
又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

Copyright(C) pPoy 2010