• ベストアンサー

複数のワードファイルで合計ページ数を知りたい

あるフォルダに数十個というWordファイルがあり、その ファイル一つ一つを開いてページ数を調べたりファイル1つ1つの プロパティを調べてページ数を加えていくのは非常に手間なので できれば「このフォルダにあるWordファイルの総ページ数を知りたい」 という要求に対して一発で解決したいと思っています。 各Wordファイルのプロパティを一覧化してくれたり、 Wordファイル分ループで回ってそれらを足しこんでくれる ツールなどは無いでしょうか。 Wordはバージョン2003でOSはXP SP2を使っています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ツールは知りません。 質問者さんの立場と要求者との関係もわかりません。 もし質問者さんがご自分でスクリプトを書く覚悟があるのなら下記の VBScript をお試し下さい。 空のテキストファイルに以下のコードをコピペして保存し、そのテキストファイルの拡張子を vbs に変更してからファイルをダブルクリックしてみてください。 フォルダ選択ダイアログが表示され、Word ファイルが入っているフォルダを選択して [OK] をクリックすると Word が実行され、次々にファイルを開いては閉じるを繰り返し、最終的に合計ページ数が表示されます。 Option Explicit Const wdStatisticPages = 2 Dim targetPath targetPath = GetTargetDir If TargetPathExists(targetPath) Then wscript.Echo "ページ合計: " & CountPage(targetPath) Else wscript.Echo "フォルダ パスが不正です" End If Function GetTargetDir() Dim objShell, objFolder Set objShell = WScript.CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択", 0) If Not objFolder Is Nothing Then GetTargetDir = objFolder.Items.Item.Path End If Set objFolder = Nothing Set objShell = Nothing End Function Function TargetPathExists(aTargetPath) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") TargetPathExists = fso.FolderExists(aTargetPath) End Function Function CountPage(aTargetPath) Dim strComputer strComputer = "." Dim objWMIService Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Dim colFiles Set colFiles = objWMIService.ExecQuery _ ("ASSOCIATORS OF {Win32_Directory.Name='" & aTargetPath & "'} Where " & _ "ResultClass = CIM_DataFile") Dim objWord Set objWord = CreateObject("Word.Application") objWord.Visible = True Dim intPages intPages = 0 Dim objFile For Each objFile in colFiles If objFile.Extension = "doc" Then Dim objDoc Set objDoc = objWord.Documents.Open(objFile.Name) intPages = intPages + objDoc.ComputeStatistics(wdStatisticPages) objDoc.Saved = True objDoc.Close End If Next objWord.Quit CountPage = intPages End Function

whiteline507
質問者

お礼

VBスクリプトをさくっと書ける人にとっては ツール化するまでもないからツールが無いんですかね... 内容をがんばって把握してから実施してみたいと思います。 ありがとうございました。

whiteline507
質問者

補足

こちらの方はWordファイルのプロパティを拾ってきているようで プロパティのページ数と実際のページ数が違っていれば 実際のページ数を正確に拾ってきてくれないようです。 残念です。

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

> こちらの方はWordファイルのプロパティを拾ってきているようで > プロパティのページ数と実際のページ数が違っていれば > 実際のページ数を正確に拾ってきてくれないようです。 その通りです。ファイルのプロパティーを列挙しています。したがって fn = Dir(f.Self.Path & "\*.doc") の拡張子部分を変更すると、Excel ファイルなどにも応用できますし、 ちょこっとコードを変更すると、MP3ファイルのビットレートやID3タグ の内容なんかも列挙することができます。  # 詳しくは GetDetailsOf で検索すると情報が得られます WORD ファイルについて、実際のページ数とは異なる場合がある点は私も 認識しておりましたが、既に #1 の良回答があったにも関わらず回答した 意図は、処理速度に重点を置き > 各Wordファイルのプロパティを一覧化してくれたり、 といったご希望に沿う...というものです。 > なぜ、プロパティには正しい値が入らないんですかね... 私にも詳しくはわかりませんが、プロパティーは「保存時」に更新 されるようですから、一度そのファイルを開いてから、上書き保存を行う と正しいページ数になりますよ。

whiteline507
質問者

お礼

ありがとうございます。色々応用できそうですね。 ただ、お教えいただいた上書き保存を行っても ページ数は全然変わらないですね... 単語数や文字数はちゃんと正しい数値が常に入っているので 肝心のページ数だけが1ページから一切変わらない状態です。 ちなみにOSもWordも当方とバージョンは同じでしょうか。 同じであれば何が違うんでしょうかねぇ... 当方では簡単に何文字か適当な文字を入れる→Ctrl+Enterで改ページ を繰り返してページ数を増やしていっていますが プロパティのページ数には全然反映されません。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんばんは。 かなり適当だけど Shell の GetDetailsOf メソッドを使った例です。 Excel VBA ですよ。標準モジュールにでも貼り付けて下さい。そして、 ページ数の総合計は SUM 関数でも使って下さい。(単なる手抜きです) では。 Public Sub EnumDocFilePropaties()   Const ERR_USER_CANCEL As Long = 1000   Const ERR_NOT_FOUND  As Long = 1001   Dim oShell  As Object   Dim f    As Object   Dim fn    As String   Dim i    As Long   Dim r    As Long      On Error GoTo Err_      ' // フォルダ選択ダイアログ   Set oShell = CreateObject("Shell.Application")   Set f = oShell.BrowseForFolder(0&, "フォルダを選んで下さい", 0&)   If f Is Nothing Then     Err.Raise ERR_USER_CANCEL   End If      ' // 初回 Word ファイル検索   fn = Dir(f.Self.Path & "\*.doc")   If Len(fn) = 0 Then     Err.Raise ERR_NOT_FOUND, , "*.doc ファイルが無いみたい"   End If      ' // 見出し作成   Set f = oShell.NameSpace(f.Self.Path)   Cells.Clear   r = 1   Application.ScreenUpdating = False   For i = 0 To 14     Cells(r, i + 1).Value = f.GetDetailsOf(, i)   Next   ' // プロパティー値列挙   While Len(fn) > 0     r = r + 1     For i = 0 To 14       Cells(r, i + 1).Value = f.GetDetailsOf(f.ParseName(fn), i)     Next     fn = Dir()   Wend   Cells.EntireColumn.AutoFit    Bye_:   Set oShell = Nothing   Set f = Nothing   Exit Sub Err_:   Select Case Err.Number     Case 1000 ' // User Cancel       Resume Bye_     Case Else ' // Other Error       MsgBox Err.Description, vbCritical       Resume Bye_   End Select End Sub

whiteline507
質問者

お礼

VBAスクリプトをさくっと書ける人にとっては ツール化するまでもないからツールが無いんですかね... 内容をがんばって把握してから実施してみたいと思います。 ありがとうございました。

whiteline507
質問者

補足

失礼しました。No.2とNo.3の方の補足を間違えてしまいました。 ExcelVBAの方がプロパティを持ってきているので正しい値が表示されないですね。 VBスクリプトの方は Set objDoc = objWord.Documents.Open(objFile.Name) intPages = intPages + objDoc.ComputeStatistics(wdStatisticPages) をFor Nextで回して一つ一つファイルを開いて足しこんでいるので 正しいページが拾ってこれているようです。 なぜ、プロパティには正しい値が入らないんですかね... temtecomai2さん、ありがとうございました。

  • dodemoii
  • ベストアンサー率59% (769/1282)
回答No.1

こんばんは 外しているかもしれませんが、 エクスプローラで詳細表示した際、その項目に 「ページ数」というカテゴリも表示可能です。 表示するにはエクスプローラの「名前」「サイズ」などの 表示している所で右クリックし、「その他...」 でページ数にチェックを入れます。 これでワードのファイルならページ数が表示できます。 (但し、図を貼り付けただけのファイルなどでは正しい ページ数が表示できないこともあるようです。 また他の形式ファイルではあまり意味が無いかも) では。

whiteline507
質問者

お礼

エクスプローラで表示できる列ってカスタマイズできるんですね。 知りませんでした。 でも簡単なワードファイル作って見てみたら 画像とか入れてないのですが、 いくらページ数を増やしても表示される数字は1のまま... プロパティから見ても1ページのままなんでWordのバグですかね... ありがとうございました。

関連するQ&A