Office関連

ConvertToTextメソッドを使ってテーブルを二次元配列に変換するWordマクロ

WordのTableオブジェクトには、テーブルを解除して文字列に変換する「ConvertToText」メソッドがあるので、これを使って下図のようなテーブルを二次元配列に変換するマクロを考えてみました。

Word_TableToArray_01

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
  1. ゼロ幅のノーブレークスペース(U+FEFF)を区切り文字にしてテーブルを文字列に変換する。
  2. 改行文字でSplitする。
  3. ゼロ幅のノーブレークスペース(U+FEFF)でさらにSplitして、Variant型の変数に格納する。

というような処理を行っていて、ローカルウィンドウで変数を確認してみると、一応上手く動作しているようです。

Word_TableToArray_02

セル中にゼロ幅のノーブレークスペースが含まれていたら意図通り動作しませんが、この文字が普通のWord文書中に出てくることはほぼ無いので、大丈夫だろうと思います。

[Word VBA]引数の型がVariantになっているのはなぜ?前のページ

Wikipediaの検索予測キーワードの一覧を取得するVBAマクロ次のページ

関連記事

  1. Office関連

    「個人用テンプレートの既定の場所」を設定するWordマクロ

    前回の記事で、Word 2013で個人用テンプレート(カスタム テンプ…

  2. Office関連

    Excel 2016 Previewで追加された新しい関数

    ※ 下記情報はOffice 2016 Preview版を元にしています…

  3. Office関連

    UI Automationの参考資料

    VBAからUI Automationを扱う際に参考になりそうな資料への…

  4. Office関連

    関数一覧(Excel 2013)

    関数の挿入ダイアログから抽出したExcel 2013の関数情報を表にし…

コメント

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

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP