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文書中に出てくることはほぼ無いので、大丈夫だろうと思います。






















この記事へのコメントはありません。