VBScript

vbscript

2019.09.26   VBScript

複数のワード文書の文字数/単語数を取得して.csv ファイルに一覧でエクスポートする

概要

Word文書を直接開かずに、文字数と単語数をファイル毎に取得して一覧を.csvファイルでエクスポートするVBScriptです。

翻訳するファイル、または翻訳した後の訳文ファイルがWord文書のときに使います。翻訳費用の計算など単語数や文字数を調べないとならないときは頻繁にあると思いますが、Word文書が一つの場合は、その文書を開いて簡単に文字数・単語数を調べることができますが、Word文書が幾つもある場合は結構手間ですよね。特にWordは開くまでに時間がかかったりします。

これを効率化するために、Wordをいちいち開かなくても、複数のファイルをドラッグするだけで、複数のWord文書の文字数・単語数を一覧にしてくれるVBScriptを作成してみました。

CATツールでもできることなのですが、どうしても若干の誤差が発生してしまいます。Wordが算出する数字をもとに費用を計算しなければならないときに重宝しています。

使用方法

以下のファイルを、任意のフォルダにダウンロードして、解凍してください。

VBScriptのアイコン

↑のようなアイコンに、Word文書(複数可)をドラッグしてください。デスクトップにWordCount.csvというファイルが作られます。ここにドラッグされたWord文書の単語数と文字数がファイル名別に一覧で表示されます。

または、以下のSource Codeをテキストファイルにコピペして、拡張子を.vbsにして保存してください。

注意:

見かけ上Word文書を開いてはいませんが、裏でWordファイルを開いています。したがって、ドラッグするWordファイルの数に比例して、処理時間が長くなります。「Completed」とメッセージボックスが表示されるまでは処理中です。

Source Code

Const fieldNames = "ファイル名, 文字数, 単語数"

Dim FSO
Dim Args
Dim objWORD 'Word アプリケーションのオブジェクト変数
Dim WordFile
Dim WordFilename
Dim objDoc
Dim pt
Dim outputPath
Dim outputFile
Dim outputString
Dim Count_W
Dim Count_Ch

Set objShell = CreateObject ("Wscript.Shell")
	outputPath = objShell.ExpandEnvironmentStrings("%USERPROFILE%")
	outputPath = outputPath & "\Desktop"
Set FSO = WScript.CreateObject ("Scripting.FileSystemObject")
Set Args = WScript.Arguments
Set objWORD = CreateObject("Word.Application")

'---------------Wordを開いて情報を取得------------------'
	For Each pt in Args
		WordFile = FSO.GetFile (pt)
		WordFilename = FSO.GetFileName (pt)
			'ドラッグされたファイルがWordファイルでなければ終了
			If Instr (WordFile, ".doc") < 1 then 
				MsgBox "Word 文章ではありません。"
				WScript.Quit
			End If

		'Wordファイルを開く
		Set objDoc = objWORD.Documents.Open(WordFile)
		Set RNG = objWORD.Activedocument.Content


		'各種情報を変数に格納
		Count_W = RNG.ComputeStatistics(0)
		Count_Ch = RNG.ComputeStatistics(3)

		outputString = outputString & WordFilename &","& Count_Ch &","& Count_W & VbCrLF
		
		objDoc.Save
		objDoc.Close
	Next
objWORD.Quit


'---------------抜き出した情報をCSVに出力------------------'
Set outputFile = FSO.OpenTextFile (outputPath & "\WordCount.csv", 8, true)
outputFile.writeline fieldNames
outputFile.WriteLine outputString


'---------------インスタンスの解放------------------'
Set outputFile = Nothing
Set objDoc = Nothing
Set objWORD = Nothing
Set Args = Nothing
Set FSO = Nothing

Wscript.Echo "Completed"
ページトップへ矢印