Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » 表の複数行(2行目以降)をWord VBAで選択する

表の複数行(2行目以降)をWord VBAで選択する

動作検証バージョン:64bit Windows 10 Pro + 32bit Word(バージョン2205 ビルド15225.20204 Microsoft Store)

「word vba 表の1行目を除いて選択」
といった検索でアクセスがありました。

Word VBAで、表の1行目を除外して2行目以降・2行目から最後の行までを選択するには、どのようなコードを書けばいいのかを探していた方による検索でしょう。

表の複数行を表すオブジェクトの取得が、Word VBAとExcel VBAとでは、かなり異なります。

表の2行目以降を選択するサンプルマクロ

行が、2行以上存在している表の中にカーソルを置いた状態で、以下のWordマクロを実行してみてください。

Sub 表の2行目から最後の行まで選択する()
On Error GoTo ErrHandl

 Dim rng As Range
 With Selection.Tables.Item(1)
  Set rng = .Rows.Item(2).Range
  rng.End = .Rows.Last.Range.End
 End With
 rng.Select

Exit Sub
ErrHandl:
 Select Case Err.Number
  Case 5941
   MsgBox "行が2行以上存在する表の中にカーソルを置いてから実行してください。"
  Case Else
   MsgBox Err.Description & vbCrLf & Err.Number
 End Select
 Err.Clear
End Sub

表の2行目以降を選択するマクロで行っている処理

上記のWordマクロで行っている処理は以下のとおりです。

SelectionオブジェクトのTablesプロパティで選択範囲内にあるすべての表を表すTablesコレクションを取得し、

With Selection.Tables.Item(1)

TablesコレクションのItemメソッドで、選択範囲内の1つ目の表を表すTableオブジェクトを取得します。

With Selection.Tables.Item(1)

その表内のすべての行を表すRowsコレクションを、TableオブジェクトのRowsプロパティで取得し、その2行目を表すRowオブジェクトをRowsコレクションのItemメソッドで取得して、

 Set rng = .Rows.Item(2).Range

Row.Rangeプロパティで取得した2行目全体を表すRangeオブジェクトを、オブジェクト変数rngに代入します。

 Set rng = .Rows.Item(2).Range

つづいて、RowsコレクションのLastプロパティで最終行を表すRowオブジェクトを取得して、

 rng.End = .Rows.Last.Range.End

RowオブジェクトのRangeプロパティで取得したRangeオブジェクトの

 rng.End = .Rows.Last.Range.End

末尾位置を、オブジェクト変数rngのEndプロパティに代入します。

 rng.End = .Rows.Last.Range.End

ここまでの処理で、オブジェクト変数rngには表の2行目から最終行の末尾までが格納されています。

最後に、Range.Selectメソッドを使って選択を行っています。

rng.Select

Excel VBAとは趣きがかなり異なる、Word VBAらしいコードです。

拙著『Excel VBAユーザーのためのWord VBA入門(1)』の「chapter 3. WordのRangeは文字列範囲を表す」「7-8. RangeとSelectionは機能面で似ている」、『Excel VBAユーザーのためのWord VBA入門(2)』の「11-1. 選択されている表の取得」「chapter 13. WordのRowは表の行を表す」あたりも、よろしければ参考にしてください。

最終更新日時:2022-07-27 11:23

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » 表の複数行(2行目以降)をWord VBAで選択する

「表・テーブル」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.