【Word VBA】表を特定の行数で分割するWordマクロ

2014年2月24日

翻訳チェックソフトの「色deチェック」は、表内の文字列の比較処理をします。

数十ページにわたる表であれば、処理スピードは速いのですが、数百ページにわたる表の場合、処理速度が遅くなります。

私はそこまで大きな翻訳案件を扱わないのですが、お客様(特許事務所)の中には、このような大きな案件を扱われているところもあります。この改善要望をいただきました。

次回のバージョンアップでは、この点を改善いたします。

この改善に使った手法を紹介します。

(背景)

文字列の比較処理において、表をオブジェクト変数に設定して扱っていました。

この表のオブジェクトがあまりにも大きいため(数百ページ)、メモリ容量ととっていたようです。

結果、処理速度が遅くなりました。

(解決策)

表を100行ごとに分割し、分割した表の1つ1つを処理します。

処理後に、分割した表を1つの表につなげます。

この分割で用いたマクロを今回の記事で紹介します。

このマクロでできること

現在表示されている文書の先頭の表を指定した行数で分割します。

例えば850行ある表を100行ごとに分割すると、101行目、201行目、、、、から次の表になります。

結果、100行の表が8つ、50行の表が1つできます。

マクロの解説

Split メソッドを用います(10行目)。

メソッドの引数(ひきすう:オプション)は、BeforeRowだけです。

名前の通り、ここで指定した行の前で分割します。

このメソッドは、指定した行から始まる表を返しますので、それをmyTableで受け取って処理を繰り返しています。

表の分割では、SplitTableというメソッドもありますが、これはSelectionオブジェクトでしか使えません。

今回のように、対象となる表を選択せずに(Selection オブジェクトで指定せずに)表を分割する場合には、Splitメソッドがいいと思います。

マクロ


Sub 表の分割()

 Dim myTable As Table
 Const myRows = 100 ’行数
 
 Set myTable = ActiveDocument.Tables(1)
 
 '表を分割
 Do While myRows < myTable.Rows.Count
  Set myTable = myTable.Split(BeforeRow:=myTable.Rows(myRows + 1))
  DoEvents
 Loop
 
 Set myTable = Nothing
 
End Sub

キーワード

how to split table, Word VBA, Macros

関連記事

-コード
-,