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 アドイン

    [Office用アプリ]第一回 Apps for Office 勉強会で登壇しました。

    19日(金)に第一回 Apps for Office 勉強会が東京で開…

  2. Office関連

    Office製品のフィードバックって本当に反映されるの?

    今年の1月に、WordやExcel等のOffice製品で、UI上の不具…

  3. Office関連

    スライド内容を自動的に機械翻訳するPowerPointマクロ

    前回の記事で紹介した各スライドに配置されたオートシェイプからテキストを…

  4. Excel

    Office クリップボードをマクロで操作する(MSAA)

    MSDNフォーラムに質問がありましたが、Office クリップボードを…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP