WordのTableオブジェクトには、テーブルを解除して文字列に変換する「ConvertToText」メソッドがあるので、これを使って下図のようなテーブルを二次元配列に変換するマクロを考えてみました。
Option Explicit Public Sub Sample() Dim v As Variant v = TableToArray(ActiveDocument.Tables(1)) Stop End Sub Private Function TableToArray(ByVal tbl As Word.Table) As Variant 'Wordのテーブルを二次元配列に変換する Dim r As Word.Range Dim v As Variant Dim vv As Variant Dim i As Long, j As Long ActiveDocument.UndoClear 'ゼロ幅のノーブレークスペース(U+FEFF)を区切り文字にしてテーブルから文字列に変換 Set r = tbl.ConvertToText(Separator:=ChrW(&HFEFF&)) r.SetRange r.Start, r.End - 1 '不要な改行除外 v = Split(r.Text, ChrW(&HD)) '改行で分割 ReDim vv(UBound(v)) j = LBound(vv) For i = LBound(v) To UBound(v) 'ゼロ幅のノーブレークスペース(U+FEFF)で分割 vv(j) = Split(v(i), ChrW(&HFEFF&)) j = j + 1 Next ActiveDocument.Undo 'テーブル変換を元に戻す TableToArray = vv End Function
- ゼロ幅のノーブレークスペース(U+FEFF)を区切り文字にしてテーブルを文字列に変換する。
- 改行文字でSplitする。
- ゼロ幅のノーブレークスペース(U+FEFF)でさらにSplitして、Variant型の変数に格納する。
というような処理を行っていて、ローカルウィンドウで変数を確認してみると、一応上手く動作しているようです。
セル中にゼロ幅のノーブレークスペースが含まれていたら意図通り動作しませんが、この文字が普通のWord文書中に出てくることはほぼ無いので、大丈夫だろうと思います。
この記事へのコメントはありません。