テーブルからテキストを抽出するマクロ

フォーマットが既知の表からテキストファイルに値を抽出するマクロ。ExcelのVBAのように結合テーブルを判別するプロパティが存在しないので、Column NoとRow Noから結合セル判別した。セルの文字列をそのまんま出力すると、変な制御コードがもれなくくっついてくるので、出力する前に塩梅よう削除するべし。

  • テーブルのサンプル
テーブル番号 テーブル番号が入力されます
テーブル名称 テーブル名称が入力されます
項目1:タイトル テーブルタイトルが入力されます
項目2:大分類:タイトル 項目の小分類タイトル(フォーマットは不定) 項目データ 項目データ詳細
備考: この項目は出力されません
  • マクロ概要::VBA for Word
Dim mtxCell As Cell
Dim mtxTable As Table
Dim rowNow As Integer
Dim title As String
For Each mtxTable In srcDoc.Tables
    'テーブルサーチ
    For Each mtxCell In mtxTable.Range.Cells
        'セルを順にサーチ
        If (mtxCell.ColumnIndex = 1) Then
            '***************************************************
            '*** 見出しカラム
            '***************************************************
            '前の項目の内容を出力(省略)
            '出力項目決定
            If (InStr(mtxCell.Range.Text, "テーブル番号")) Then
                title = "テーブル番号"
            ElseIf (InStr(mtxCell.Range.Text, "テーブル") And _ 
                    InStr(mtxCell.Range.Text, "名称")) Then   'セル内で改行
                title = "テーブル名称"
            ElseIf (InStr(mtxCell.Range.Text, "項目1:タイトル")) Then
                title = "項目1:タイトル"
            ElseIf (InStr(mtxCell.Range.Text, "項目2:") And _ 
                    InStr(mtxCell.Range.Text, "大分類:タイトル")) Then   'セル内で改行
                title = "項目2:大分類:タイトル"
            Else
                title = ""
            End If
        Else
            '出力項目が決定していれば、それにぶら下がる内容を出力
            '見出しとなる結合セルが変わらなければ同じ項目として処理する
            '出力用文字列バッファに任意のフォーマットで整形(省略)
        End If
        rowNow = mtxCell.RowIndex
    Next    'Loop Cells
    '前の項目の内容を出力(省略)
Next    'Loop Tables
  • 出力結果
テーブル番号
	テーブル番号が入力されます
テーブル名称
	テーブル名称が入力されます
項目1:タイトル
	テーブルタイトルが入力されます
項目2:大分類:タイトル
	項目の小分類タイトル(フォーマットは不定)	項目データ	項目データ詳細
テーブル番号
	000.01.01
テーブル名称
	table_sample_0000101
項目1:タイトル
	テーブル項目1のデータ改行してもオーケー。
項目2:大分類:タイトル
	項目2:小分類01	2-01:データ	2-01:データ詳細
テーブル番号
	000.01.02
テーブル名称
	table_sample_0000102
項目1:タイトル
	テーブル項目1のデータ改行してもオーケーよ。
項目2:大分類:タイトル
	Column2:小分類01	2-01:データ	2-01:データ詳細
	Column2:小分類02	2-02:データ	2-02:データ詳細
	Column2:小分類03	2-03:データ	2-03:データ詳細
	Column2:小分類04	2-04:データ	2-04:データ詳細
	Column2:小分類05	2-05:データ	2-05:データ詳細
	Column2:小分類06	2-06:データ	2-06:データ詳細
	Column2:小分類07	2-07:データ	2-07:データ詳細
	Column2:小分類08	2-08:データ	2-08:データ詳細
	Column2:小分類09	2-09:データ	2-09:データ詳細
	Column2:小分類10、2-10:データ、2-10:データ詳細(結合してみた)