中山テック 代表の中山です。
今回はvbsについてのお話になります。
Excel(エクセル)も便利ですが、わざわざアプリを開かないといけません。
vbsはメモ帳1個あれば作れます。
ブログや固定ページで「何文字書いたか」を数えるツールが必要となり
30分掛からず作成したツールがありますので、どのように作ったかご説明したいと思います。
まず、メモ帳を用意します。
※上記画像では「サクラエディタ」ですが、Windows標準のメモ帳でも構いません
すると「新しいテキスト ドキュメント.txt」が出来上がります。
そしたら「aaa.vbs」(aaaは何でもいい)と変えてあげます。
これで準備は整いました。
拡張子が変更できない場合
拡張子が出ていない場合は上記画像のように操作すれば変えることが出来ます。
フォルダを開いて
「表示」タブ→「ファイル名拡張子」にチェックを入れます。
これでファイルに拡張子(.txt、.xlsx、.jpg等)が付きます。
vbsの拡張子はWindowsで動くアプリケーションです。
メモ帳ベースにプログラムを書くことですぐ動くようになります。
注意点として、テキストファイルからvbsを作るようにしてください。
コード
コードを表示してから解説していきます。
Option Explicit
Dim file
Dim objFileSys
Dim objReadStream
Dim strLine
Dim lngCnt
if WScript.Arguments.Count = 0 then
WScript.echo("ファイルをこのツールにドラッグ&ドロップしてください")
WScript.Quit(-1)
end if
' ファイル名取得
file = Wscript.Arguments(0)
' FSオブジェクト
Set objFileSys = CreateObject("Scripting.FileSystemObject")
' ファイルオープン
Set objReadStream = objFileSys.OpenTextFile(file, 1)
Do Until objReadStream.AtEndOfStream = True
'1 行読み込み
strLine = objReadStream.ReadLine
lngCnt = lngCnt + Len(strLine)
Loop
WScript.echo "文字数:" & lngCnt
objReadStream.Close
Set objFileSys = Nothing
まず、ファイルを「CreateObject」で取得します。
※ファイルのメモリ位置を取得
そしてファイルをいぢれるおまじない「CreateObject("Scripting.FileSystemObject")」をかけ
「objFileSys.OpenTextFile」でファイルオープンします。
Do Until~は「ファイルの終わりまで1行ずつ取得する」という命令になり
「Len」で文字数を取得します。
最後「objReadStream.Close」で読み込んだファイルを閉じます。
実践
試しに3月23日にアップしたブログ「お電話をためらっている方へ~制作のご相談がある場合~」の
本文をコピーし、貼り付けた後文字数をカウントしてみます。
aaa.vbsにドラッグ&ドロップします。すると・・・
ポップアップが出現し、文字数を教えてくれます。
これにて作業完了です!
ん・・・?
ちょっと待ってちょっと待ってお兄さん!
1832文字って何ですの(古)
まず、1行目8文字だったし全体で1000行程度ということで確認をしてみました。
ちょっと面倒ですが、1行ずつ何文字取ったかを確認するためにダイアログを出してみます。
※vbsはデバッグが大変というデメリットがあります
それでまたファイルをドラッグ&ドロップしてみますと・・・
何で16文字?
Len関数は文字数を返すので、16になる訳がないのですが・・・
さて、勘の良い方はすでにお気づきかと思いますが、実は「文字コード」がミソなのです!
UTF-8でした。
文字コードの話をすると長くなるので割愛しますが、Shift-JIS(SJIS)に直して計算しましょう。
まとめ
いかがでしたでしょうか。
今回は非常に簡単なプログラムを紹介しました。
他にも数字の連番のフォルダやファイルを250個作る、文字を入力させてテキスト出力させるなど。
出来ることがかなりあります。
ただ、中にはvbsでは動きが遅いのでJavaScriptでやった方がいい場合がございます。
状況によっては便利なvbs、簡単ですので是非試してみてください!