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関連

    コンテンツコントロールに外部XMLのデータをマップするWordマクロ

    Word 2007で追加された機能「コンテンツコントロール」を使うと外…

  2. Office アドイン

    [Office用アプリ]開発入門の記事を書かせていただきました。

    日経ソフトウエア 2014年3月号から連載の「Office用アプリ開発…

  3. Office関連

    Outlookを使ってGmail送信を行うVBAマクロ

    下記G Suite アップデート ブログにある通り、今年の6月には“安…

  4. アイコン一覧

    Office 365アイコン(imageMso)一覧(G)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP