「ワードをエクセルに変換する方法」という検索をもとにして、Wordからすべての文をExcelに出力するマクロをご紹介しました。
「変換」をどうとらえるかですが、文ごとではなく、段落ごとに、Excelへ出力するという考え方もあるでしょう。
すべての段落をExcelに出力するのであれば、段落ごとの文字数をカウントするのを、Excelのワークシート関数を使って行うという考え方もありでしょう。
全段落をExcelに出力するサンプルマクロ
すべての段落をExcelに出力して、段落ごとに文字数をカウントするワークシート関数を挿入するWordマクロを作成してみました。
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
サンプルマクロの解説
一旦配列にデータを格納して、一気に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
Home » ワードマクロ・Word VBAの使い方 » Office連携 » ワードをエクセルに変換する-すべての段落をExcelに出力するWordマクロ