Home » ワードマクロ・Word VBAの使い方 » Office連携 » ワードをエクセルに変換する-すべての段落をExcelに出力するWordマクロ

ワードをエクセルに変換する-すべての段落をExcelに出力するWordマクロ

対象:Word2003, Word2007, Word2010

「ワードをエクセルに変換する方法」という検索をもとにして、Wordからすべての文をExcelに出力するマクロをご紹介しました。

「変換」をどうとらえるかですが、文ごとではなく、段落ごとに、Excelへ出力するという考え方もあるでしょう。

すべての段落をExcelに出力するのであれば、段落ごとの文字数をカウントするのを、Excelのワークシート関数を使って行うという考え方もありでしょう。

[スポンサードリンク]

全段落をExcelに出力するサンプルマクロ

すべての段落をExcelに出力して、段落ごとに文字数をカウントするワークシート関数を挿入するWordマクロを作成してみました。

Sub すべての段落をExcelに出力する()

 Dim par As Paragraph
 Dim arr As Variant ' ページ&行番号, スタイル名, 文字列
 Dim cnt As Long ' 段落数
 Dim txt As String ' 段落の文字列
 Dim xls As Object ' Excel.Applications
 Dim i As Long

 ' 配列にデータ格納
 cnt = ActiveDocument.Paragraphs.Count
 ReDim arr(1 To cnt, 1 To 3)
 
 i = 1
 For Each par In ActiveDocument.Paragraphs
  With par
   'スタイル名
   arr(i, 2) = .Style
   With .Range
    ' ページ番号と行番号
    arr(i, 1) = "p." & _
     .Information(wdActiveEndAdjustedPageNumber) & _
     "-" & _
     .Information(wdFirstCharacterLineNumber)
    ' 段落記号の削除
    txt = .Text
    txt = Replace(txt, vbCr, "")
    ' 任意指定の行区切りをExcelのセル内改行に置換
    txt = Replace(txt, vbVerticalTab, vbLf)
    ' 整形した文字列を配列に
    arr(i, 3) = txt
   End With
  End With
  i = i + 1
 Next
 
 ' Excelに出力
 Set xls = CreateObject("Excel.Application")
 With xls
  .Workbooks.Add
  ' データを一気に書き出し
  .Range(.Range("A2"), .Cells(cnt + 1, 3)).Value = arr
  ' 数式の入力
  .Range(.Range("D2"), .Cells(cnt + 1, 4)).FormulaR1C1 _
    = "=LEN(R[0]C[-1])"
  ' 見出し行の作成
  .Range("A1").Value = "ページ&行"
  .Range("B1").Value = "スタイル名"
  .Range("C1").Value = "文字列"
  .Range("D1").Value = "文字数"
  '列幅・文字列の表示位置の調整
  With .Range("A1").CurrentRegion
   .EntireColumn.AutoFit
   .VerticalAlignment = -4160 ' xlVAlignTop
  End With
  With .Columns("C:C")
   .ColumnWidth = 50
   .WrapText = True
  End With

  .Visible = True
 End With
 Set xls = Nothing

End Sub

サンプルマクロの解説

一旦配列にデータを格納して、一気にExcelに書き出すという考え方は、これまで何度かご紹介してきたマクロと同じです。

まず段落数をカウントして二次元配列のサイズを決定します。
 cnt = ActiveDocument.Paragraphs.Count
 ReDim arr(1 To cnt, 1 To 3)

For Each~Next文で配列にデータを格納していきます。
 For Each par In ActiveDocument.Paragraphs

スタイル名を二次元配列の2列目に
 arr(i, 2) = .Style

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

段落の文字列から、段落記号を削除して、任意指定の行区切りをExcelのセル内改行に置換してから、二次元配列の3列目に格納しています。
 txt = .Text
 txt = Replace(txt, vbCr, "")
 txt = Replace(txt, vbVerticalTab, vbLf)
 arr(i, 3) = txt

配列にデータを格納し終わったらExcelに書き出しです。

ブックを追加して
 .Workbooks.Add

配列からデータを一気に書き出し
 .Range(.Range("A2"), .Cells(cnt + 1, 3)).Value = arr

文字数をカウントする数式をD列に入力します。
 .Range(.Range("D2"), .Cells(cnt + 1, 4)).FormulaR1C1 _
   = "=LEN(R[0]C[-1])"

データと数式の入力が終わったら、見出し行を作成して
 .Range("A1").Value = "ページ&行"
 .Range("B1").Value = "スタイル名"
 .Range("C1").Value = "文字列"
 .Range("D1").Value = "文字数"

A:D列の列幅を自動調整し
 With .Range("A1").CurrentRegion
  .EntireColumn.AutoFit

文字列の縦方向の表示位置を上に設定しています。
 .VerticalAlignment = -4160

このマクロでは参照設定を行っていないので、定数のxlVAlignTopではなく「-4160」と直値を指定しています。

C列の横幅を「50」に
 With .Columns("C:C")
  .ColumnWidth = 50

文字列の折り返し設定を行い
 .WrapText = True

Excelを表示しています。
 .Visible = True

関連語句
VBA, Visual Basic for Applications

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Office連携 » ワードをエクセルに変換する-すべての段落をExcelに出力するWordマクロ

「Office連携」の記事一覧

検索


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

.