Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBAでワードファイル内のデータをエクセルにはりつける方法

8,277 views
Skip to first unread message

奥羽

unread,
Jul 27, 2009, 10:37:01 PM7/27/09
to
WINXp エクセルワードともに2003を使用しております。
このたび仕事で大量のワードファイルを整理しなければならず、
それらのワードファイルを一覧化してエクセルに変換したいと思います。(ほしいのはワード内のデータのみで構成等は必要ない)
ワードファイルが1000ほどあり、それらをまとめるには大変なので
VBAでエクセル側からワードを開き、ワードの文章をコピー→オブジェクトとしてペースト→テキスト変換する
という方法をとりましたが
オブジェクトとしてコピー&ペーストでは作業が重くなりすぎて
とても1000ものファイルを変換できそうにありません。
ワードファイル内のデータエクセルに落とすのに重くならない方法はありますでしょうか?
お助けください。

y sakuda

unread,
Jul 28, 2009, 7:03:31 AM7/28/09
to
"奥羽" <@discussions.microsoft.com> wrote in message
news:D74B32AD-7A8C-4CAA...@microsoft.com...

> WINXp エクセルワードともに2003を使用しております。
> このたび仕事で大量のワードファイルを整理しなければならず、
> それらのワードファイルを一覧化してエクセルに変換したいと思います。(ほしいのはワード内のデータのみで構成等は必要ない)
> ワードファイルが1000ほどあり、それらをまとめるには大変なので
> VBAでエクセル側からワードを開き、ワードの文章をコピー→オブジェクトとしてペースト→テキスト変換する
> という方法をとりましたが
> オブジェクトとしてコピー&ペーストでは作業が重くなりすぎて
> とても1000ものファイルを変換できそうにありません。

条件があいまいです。次の点を明らかにしてください。
1.ファイルを入れ替えながら処理する部分は自力でできてらっしゃるのか
2.作成するExcelブックは一つにするのか、Word文書毎に一つつくるのか
3.Word文書中にテープルなどはあるのか
などです。
下の例はWord文書一つを段落毎にバラしてセルに入れるサンプルです。

Sub aaa()
Dim wWord As Object, wDoc As Object, wPath As String
Dim I As Long, wPara As Object
wPath = ActiveWorkbook.Path
Set wWord = CreateObject("word.application")
wWord.Visible = True
Set wDoc = wWord.documents.Open(wPath & "\Test.doc")
I = 0
For Each wPara In wDoc.content.paragraphs
With ActiveSheet
I = I + 1
.Cells(I, 1).Value = wPara.Range.Text
End With
Next
wDoc.Close False
wWord.Quit
End Sub

参考まで。

--
ニュースグループの購読にはOutlook Express などのニュースリーダーを
使用してください。

下記のサイトをご覧下さい
http://www.microsoft.com/japan/communities/newsgroups/faq.mspx
http://www.microsoft.com/japan/communities/newsgroups/list.mspx

y sakuda Microsoft MVP for Business Productivity - Excel
(Jan 2009 - Dec 2009)
sakudaya...@hotmail.com

ニュースグループの購読にはOutlook Express などのニュースリーダーを
使用してください。

下記のサイトをご覧下さい
http://www.microsoft.com/japan/communities/newsgroups/faq.mspx
http://www.microsoft.com/japan/communities/newsgroups/list.mspx

y sakuda Microsoft MVP for Business Productivity - Excel
(Jan 2009 - Dec 2009)
sakudaya...@hotmail.com

VBA,VBSによるツールなどがあります
http://www16.plala.or.jp/ysakuda/ystop.htm
6月27日 Windows更新履歴をVBAのページに追加しました。


奥羽

unread,
Jul 31, 2009, 10:21:01 AM7/31/09
to
返信ありがとうございました。
あいまいな点が多く申し訳ありません。
ご記入いただいたあいまいな点を補足いたします。


1.ファイルを入れ替えながら処理する部分は自力でできてらっしゃるのか
 A:ファイルの入れ替えは自力でできます。
2.作成するExcelブックは一つにするのか、Word文書毎に一つつくるのか
 A:ブックは一つにまとめたいと思います。1回ワードからファイルを読み込んだら別シートに転記し、次のワードファイルを読み込む、という繰り返し作業にしたいと思います。
3.Word文書中にテープルなどはあるのか
 A:テーブルは2つあります。

先日いただいたサンプルはこれから検証いたしたいと思います。
今日は先日の補足とお礼まで書き込みしました。
ありがとうございます。
もしお手数でなければ上記補足分のアドバイスいただければ幸いです。


y sakuda

unread,
Jul 31, 2009, 12:47:19 PM7/31/09
to
"奥羽" <@discussions.microsoft.com> wrote in message
news:FFFEBF3D-28BB-4957...@microsoft.com...

> 1.ファイルを入れ替えながら処理する部分は自力でできてらっしゃるのか
>  A:ファイルの入れ替えは自力でできます。
> 2.作成するExcelブックは一つにするのか、Word文書毎に一つつくるのか
>  A:ブックは一つにまとめたいと思います。1回ワードからファイルを読み込んだら別シートに転記し、次のワードファイルを読み込む、という繰り返し作業にしたいと思います。

ということですと、プログラムは次のような構成になります。


Set wWord = CreateObject("word.application")

以下ループ
wFileNameに文書名をセット
Set wDoc = wWord.documents.Open(wPath & "\" & wFileName)

段落を読んでExcelのセルに挿入
wDoc.Close False
ループの末端

ExcelブックをSave
Set wWord=Nothing

つまり、眼目はWordObjectを繰り返し作らず一つ作って繰り返し利用するということになります。


> 3.Word文書中にテープルなどはあるのか
>  A:テーブルは2つあります。
先日のサンプルでテーブルを含んだ文書を処理してみれば分かると思いますが、
テーブルのセルから読みだしたパラグラフの最後には コード 07 の文字一文字がくっついてきます。
これを気にする必要が無ければ、何もする必要がありません。
もし、ゴミ取りが必要でしたら、
if wPara.Range.Information(12) then
<テーブルの中の段落の処理>
Else
 <テーブル以外の段落の処理>
end if
と言った判別が必要になります。 上記の12は Informationプロパティで使用する定数で
wdWithInTable です。
Excelでマクロを書かれるようですから、Wordライブラリに参照設定をしていない場合、wdXXXXXタイプの
定数は数字に直す必要があります。
参考まで。
分からない点、上手く行かない点がありましたら、コードを提示して質問してください。

0 new messages