Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » 表を選択するWordマクロ

対象:Word2007, Word2010, Word2013

「word vba 表 選択」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

Wordでマクロ記録を開始すると、ドラッグ操作では表を選択することはできなくなってします。そのため、表を選択するVBA(Visual Basic for Applications)のコードをどう書けばいいのか疑問に感じる方がいらっしゃるのは、とても納得できます。

ここでは表を選択するWordマクロを2つご紹介しておきます。

ただし、Word VBAで表を操作するときに、本当に選択しなければいけないのか、選択処理がそもそも必要なのか、Rangeオブジェクトを使った処理ではダメなのかについて、まずは、しっかりと考えてください。

[スポンサードリンク]

カーソルの置かれている表を選択するサンプルマクロ

本当に表を選択するマクロが欲しいという状況を想像すると、カーソルの置かれている表を選択するという、操作性を向上するためのマクロのニーズはありそうです。


Sub カーソルのある表を選択する()

 With Selection.Tables
  If .Count = 0 Then Exit Sub
  .Item(1).Select
 End With
 
End Sub

以上のようなマクロで、カーソルが置かれている表全体を選択することができます。

本当は、
 Selection.Tables(1).Select
という1行だけでOKなのですが、この1行だけでは表の中にカーソルがない状態で実行されたときに、実行時エラーが発生してしまいます。この実行時エラーを回避するためにIf文を入れてあります。

このマクロで利用しているオブジェクトモデルの階層関係を図にすると以下のとおりです。

表を選択するWordマクロ

このマクロの階層関係はそれほど複雑なものではありません。

コードの意味は以下のとおりです。

選択範囲・カーソル位置を表すSelectionオブジェクトの、Tablesコレクションオブジェクトを取得して、
 With Selection.Tables

表の数がゼロだったときにはマクロを終了しています。
  If .Count = 0 Then Exit Sub

表を選択するWordマクロ

カーソル位置に表が存在していたときには、
 With Selection.Tables
  .Item(1).Select
Tablesコレクションオブジェクトの、Itemメソッドの引数に「1」を指定することで、1つ目のテーブルを表すTableオブジェクトを取得して、

表を選択するWordマクロ

TableオブジェクトのSelectメソッドで選択を行っています。

表を選択するWordマクロ

アクティブページの1つ目の表を選択するサンプルマクロ

もう一つ本当に表を選択するマクロが欲しいという状況を想像すると、アクティブなページの表を選択するマクロもニーズがありそうです。


Sub アクティブページの表を選択する()

 With ActiveDocument.Bookmarks("\Page").Range.Tables
  If .Count = 0 Then Exit Sub
  .Item(1).Select
 End With

End Sub

このマクロで利用しているオブジェクトモデルの階層図は以下のとおりです。

表を選択するWordマクロ

先にご紹介した、カーソルの置かれている表全体を選択するマクロよりも階層関係がかなり深くなっています。このマクロに限らず、アクティブなページに対するWordマクロの場合は必ずこの程度の階層になってしまいます。

先のマクロどこが違うのかというと、
 With ActiveDocument.Bookmarks("\Page").Range.Tables
の部分です。先のマクロでは、
 With Selection.Tables
となっていた部分が変更になっています。

この部分の意味は以下のとおりです。

ActiveDocumentプロパティで、アクティブな文書を表すDocumentオブジェクトを取得して、

表を選択するWordマクロ

DocumentオブジェクトのBookmarksプロパティで、Bookmarksコレクションオブジェクトを取得して、

表を選択するWordマクロ

BookmarksコレクションオブジェクトのデフォルトメソッドであるItemメソッドの引数に「\Page」を指定することで、アクティブなページを表すBookmarkオブジェクトを取得して、

表を選択するWordマクロ

BookmarkオブジェクトのRangeプロパティで、ページ全体を表すRangeオブジェクトを取得して、

表を選択するWordマクロ

RangeオブジェクトのTablesプロパティで、アクティブなページ全体に存在するすべての表を表すTablesコレクションオブジェクトを取得しています。

表を選択するWordマクロ

このあとの、
  If .Count = 0 Then Exit Sub
  .Item(1).Select
については、先のマクロと同じです。

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » 表を選択するWordマクロ

TrackBack:1

TrackBack URL
表のセルを選択するWord VBAのコード from インストラクターのネタ帳
対象:Word2007, Word2010, Word2013 「word v...

Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » 表を選択するWordマクロ

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

検索


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

.