Home » ワードマクロ・Word VBAの使い方 » Office連携 » ワードをエクセルに変換する-センテンス・文単位で文字列をExcelに出力するWordマクロ

ワードをエクセルに変換する-センテンス・文単位で文字列をExcelに出力するWordマクロ

対象:Word2003, Word2007, Word2010

「ワードをエクセルに変換する方法」
といった検索が行われていることがあります。

この「変換」という単語が何を意味しているかによって、実際にできるかどうかの難易度はかなり変動しますが、Word文書をExcelで再利用するためにテキストを抜き出すということであれば、マクロを組むことで可能です。

[スポンサードリンク]

以下のようなマクロで、すべての文をExcelに出力できます。

Sub 文単位で文字列をExcelに出力する()

 Dim cnt As Long ' 文の数
 Dim i As Long
 Dim arr()
 Dim rng As Range
 Dim xls As Object ' Excel.Application

 cnt = ActiveDocument.Sentences.Count
 ReDim arr(1 To cnt, 1 To 2)
 
 i = 1
 For Each rng In ActiveDocument.Sentences
  With rng
   ' ページ番号と行番号の格納
   arr(i, 1) = "p." & _
    .Information(wdActiveEndAdjustedPageNumber) & _
    "-" & _
    .Information(wdFirstCharacterLineNumber)
   ' 文の格納
   arr(i, 2) = .Text
  End With
  i = i + 1
 Next

 ' Excelに書き出し
 Set xls = CreateObject("Excel.Application")
 With xls
  .Workbooks.Add
  .Range(.Range("A1"), .Cells(cnt, 2)).Value = arr
  .Visible = True
 End With
 Set xls = Nothing

End Sub

上記のマクロを実行すると、A列にページ番号と行番号が「p.1-1」というフォーマットで、B列に文が出力されたExcelが起動します。

やっていることは以下のとおりです。

文の数を取得して
 cnt = ActiveDocument.Sentences.Count

二次元配列のサイズを決定して
 ReDim arr(1 To cnt, 1 To 2)

すべての文に対してループを回して
 For Each rng In ActiveDocument.Sentences
二次元配列にデータを格納していきます。

ページ番号と行番号を二次元配列の1列目に格納し
   arr(i, 1) = "p." & _
    .Information(wdActiveEndAdjustedPageNumber) & _
    "-" & _
    .Information(wdFirstCharacterLineNumber)

文を二次元配列の2列目に格納しています。
   arr(i, 2) = .Text

すべての文を配列に格納し終わったら、Excelオブジェクトを作って
 Set xls = CreateObject("Excel.Application")
ブックを追加して
  .Workbooks.Add
データを二次元配列から一気に書き出し
  .Range(.Range("A1"), .Cells(cnt, 2)).Value = arr
Excelを表示して
  .Visible = True
最後にExcelオブジェクトを破棄しています。
 Set xls = Nothing

関連語句
VBA, Visual Basic for Applications

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Office連携 » ワードをエクセルに変換する-センテンス・文単位で文字列をExcelに出力するWordマクロ

「Office連携」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.