Wordの表の行を削除する
Wordドキュメント内の表の任意の行を削除する
差込印刷機能を使って似たような書類のWordファイルを自動的に作成するマクロをよく使う。
Excelで表さえ作ってしまえば、人力でポチポチやるよりも圧倒的に正確かつ高速なので重宝している。
ただ、表を伴うようなもの、しかも表の行数がそれぞれ異なるようなものを作成する羽目になった。
そうしょっちゅう使うこともないと思うので、覚書代わりにアップしとく。
表の行を削除するマクロ
Wordドキュメントにこんな表があったとする。
何行目かが分かりやすいように表の先頭行以外の左端の列には行番号を入れといた。
リスト1 表の5行目を削除するマクロ
Public Sub tableTest() Dim tbl As Table '……(1)' Set tbl = ThisDocument.Tables(1) tbl.Rows(5).Delete '……(2)' End Sub
(1)からの2行、
Dim tbl As Table Set tbl = ThisDocument.Tables(1)
では、Table型の変数tblを準備して、ThisDocument上の1つ目の表を格納している。
で、(2)の
tbl.Rows(5).Delete
ではtblに格納したTableオブジェクトのRowsコレクションのうち、5番目のRowオブジェクトに対してDeleteメソッドを使用。
すると、
こうなる。簡単!
任意の行を削除するFunction
作ってみた。
リスト2 表の任意の行を削除するFunction
Private Function deleteRowFromTable(ByVal objTable As Table, _ ByVal rowNum As Integer) As Table '……(1)' On Error GoTo errorCatch '……(2)' objTable.Rows(rowNum).Delete Set deleteRowFromTable = objTable '……(3)' Exit Function errorCatch: '……(*)' Set deleteRowFromTable = objTable End Function
(1)は、
Private Function deleteRowFromTable(ByVal objTable As Table, _ ByVal rowNum As Integer) As Table
の形で引数と返り値を設定。
第1引数がTableオブジェクト、第2引数は削除したい行番号。
で、返り値をTableオブジェクトにした。
行削除後のTableオブジェクトを返すようにしたら便利じゃないかと思っただけw
(2)の
On Error GoTo errorCatch
はエラー対策。今のところ
- 存在しない行番号を引数として与えた
ぐらいしかエラーの原因は思いつかないけれど、メンドウなのでこの形を使った。
エラーが発生すると、(*)の
errorCatch: Set deleteRowFromTable = objTable
に飛んで、処理する。返り値には何もせずに元の表を返す。
(3)の
Set deleteRowFromTable = objTable
で処理済みの表を返す。
実行結果
リスト2のFunctionを、次のコードで使ってみる。
リスト3 実行用コード
Public Sub tableTest() Dim tbl As Table Set tbl = ThisDocument.Tables(1) Debug.Print "使用前:" & tbl.Rows.Count '……(1)' Set tbl = deleteRowFromTable(tbl, 5) Debug.Print "使用後:" & tbl.Rows.Count '……(2)' End Sub
(1)で実行前の表の行数をイミディエイト・ウインドウに表示し、(2)で実行後の表の行数を表示するようにした。
ほれ、この通り、指定した行を削除した上で、処理後の表を獲得することができている。
終わりに
WordのVBAは、あまり使う機会がないので、たまに使ったときにちゃんと記録を残しておかないとなあ。