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

2018年6月6日

以前の記事「【コード】表を特定の行数で分割するWordマクロ 」を発展させたものです。

分割した表を別のファイルに同時に書き出します。

Wordで動く翻訳チェックソフト「色deチェック」を使う場合、5000行以上の表(数百ページ)だったりしてファイルが大きいと処理が遅くなるため、小さなファイルに分割してそれぞれを処理したほうがよいことがあります。

このマクロでできること

ファイルの1つ目の表を対象にした処理です。

表を100行ごとに分割して、分割した表を新規ファイルに貼り付けます。

マクロの解説

処理対象は、現在開いているファイルの1つ目の表です(10行目で指定)。

この表を、設定した行数(サンプルコードでは100行)で分割します(6行目)。

前回の記事と考え方でSplit メソッドを用いて分割します(15行目)。

今回の記事では、分割した表を別の新規ファイルに貼り付けますので、その処理を18行目~20行目で実行します。

24行目から26行目では、「最後に残った部分」を新規ファイルに貼り付けます。

たとえば、750行の表があった場合、100行ごとに表を分割するので、100行の表が7つと50行の表が1つ生成されます。この50行の表を「最後に残った部分」と呼んでいます。

マクロ


Sub 表の分割_新規文書に貼り付け()
 
 Dim myActDoc As Document '処理対象のファイル
 Dim myNewDoc As Document '新規ファイル
 Dim myTable As Table
 Const myRows = 100 '行数
 
 '前処理
 Set myActDoc = ActiveDocument
 Set myTable = myActDoc.Tables(1)
 
 '表を分割
 Do While myRows < myTable.Rows.Count
  '表を2つに分割して後半の表をmyTableに設定
  Set myTable = myTable.Split(BeforeRow:=myTable.Rows(myRows + 1))
  DoEvents
  '分割後の前半の表(myTableの1つ前の表)を新規文書に貼り付ける
  Set myNewDoc = Documents.Add
  myNewDoc.Range.FormattedText = myTable.Range.Previous(wdTable)
  DoEvents
 Loop
 
 '分割後に最後に残った部分(myTable)を新規文書に貼り付ける
 Set myNewDoc = Documents.Add
 myNewDoc.Range.FormattedText = myTable.Range
 DoEvents
 
 '後処理
 Set myActDoc = Nothing
 Set myNewDoc = Nothing
 Set myTable = Nothing
 
End Sub

関連記事

-コード
-, ,