2020年4月18日
仕事で必須ツールといえる Excel, Word における手作業を自動化できれば
時間の節約という以上に爽快感があります。
ここでは Excel, Word の起動と終了も含めて自動化するため
VBAのマクロではなく VBScriptを使います。
VBScriptを使うといっても基本的にはVBAのルールに従いますが、
ほんとにやりたい処理手続きを書く前に前置きの手続きがあれこれあって面倒です。
そこで、前置きをなるべく省けるようにサブルーチン・関数を作りました。
そして、それらサブルーチン・関数の名前の多くを日本語にしました。
VBScriptでは、半角の [……]
で囲むと、日本語の変数名や関数名を使えます。
「自動化のハードルを下げて、もっと身近に」が本項の目的です。
JuseOffice(ジュース・オフィス)を試す方法を記します。
この名前は、Japanese use Office のつもりです。
JuseOffice01.zipをダウンロードして解凍します。
すると、次のファイルやフォルダが出てきます。
サンプルスクリプトは、Explorer上で選択してエンターキーを押せば実行できます。
sample01.wsf を実行すると Excelファイルが作成されます。
sample02.wsf を実行すれば Wordファイルができます。
サンプルスクリプトの拡張子が vbs でなく wsf になっていますが、
wsfといっても中身は VBScript です。
VBScriptには他のスクリプトファイルを取り込む機構が用意されていないので
wsfにして JuseOffice.vbs を取り込んでいます。
sample01.wsf の中身は下のとおり。
<job><script language="VBScript" src="JuseOffice.vbs"/>
<script language="VBScript">
[ワークブックを開く] "sample01.xlsx"
[ワークシート].Range("A1").Value = "Hello"
[ワークブックを保存]
[エクセルを終了]
</Script></job>
1~2行目、および最終行は wsfの「おまじない」です。
スクリプトの本体は 3~6行目の4行です。
sample01.xls というワークブックを開いて、
ワークシートの A1セルに Hello を書き込みます。
そしてワークブックを保存したうえでエクセルを終了です。
「おまじない」の部分の意味は下のとおり。
sample02.wsf の中身は下のとおり。
1~2行目、および最終行は sample01.wsf と同じです。
<job><script language="VBScript" src="JuseOffice.vbs"/>
<script language="VBScript">
[ドキュメントを開く] "sample02.docx"
[ドキュメント].Range(0, 0).Text = "Hello"
[ドキュメントを保存]
[ワードを終了]
</Script></job>
ワードのドキュメント sample02.docx を開いてから
文書の先頭に Hello を書き込んで
ドキュメントを保存して終了しています。
Hello を書き込む部分は、下のように書く方が正統派かもしれません。
[ドキュメント].Paragraphs(1).Range.Text = "Hello"
JuseOffice.vbsで定義しているサブルーチン、関数にはいろいろありますが
その中のExcel関連で基本的なものについて解説します。
まずは sample01.wsf は基本中の基本なので少し詳しく記します。
sample01.wsfの主要部分を改めて掲げます。
[ワークブックを開く] "sample01.xlsx"
[ワークシート].Range("A1").Value = "Hello"
[ワークブックを保存]
[エクセルを終了]
文字どおりワークブックを開くためのものです。
引数として "test.xlsx"
などのファイル名を指定します。
"C:\work\test.xlsx"
のようなパス名でも大丈夫です。
そのファイルは、存在していても存在していなくてもかまいません。
つまり、新規作成でも既存のファイルのオープンでも、どちらでもOKです。
この「開く」でファイル名を指定しておくことで
あとで [ワークブックを保存]
のときにファイル名を指定しなくて済みます。
Excelの起動は、暗黙のうちに行うので意識しなくて大丈夫です。
ワークブックを開いたあと、次の二つのグローバル変数がセットされます。
なお、[ワークブックを開く]
はワークブックオブジェクトを返します。
なので厳密にはサブルーチンでなく関数です。
[ワークブックを開く]
の後で、変数 [ワークシート]
には
ActiveSheetのオブジェクトがセットされます。
なので、[ワークシート].Range("A1")
のように書けます。
ワークブックに複数のシートが含まれている場合、
ActiveSheetが第1シートであるとは限りません。
確実に第1シートを扱いたいときは
[ワークシートを切り替え] 1
という1行を書きます。
そうすれば変数 [ワークシート]
に第1シートがセットされます。
[ワークシートを切り替え]
の引数には数値以外に "Sheet1"
などの
文字(ワークシート名)を指定することもできます。
[ワークブックを保存]
は、あらかじめ指定されていたファイル名で
ワークブックを保存します。「上書き保存」に該当します。
別の名前で保存したいときは
[ワークブックを別名で保存] "work.xlsx"
のような1行を書きます。こちらは「名前を付けて保存」に該当します。
別名で保存した場合、その別名がデフォルトの名前になります。
なので、次に[ワークブックを保存]
を実行すると、
別名の方で保存されます。
[エクセルを終了]
は、すべてのワークブックを閉じてからExcelを終了します。
その際い、ワークブックの保存の処理はしません。無条件にCloseします。
GUI操作しているときと異なり、Excelアプリケーションは
ワークブックをすべて閉じても終了しません。
なので、明示的に終了させる必要があります。
これを忘れると VBScriptが終了した後も Excelが起動したまま残ります。
サンプルスクリプトには出てきませんが、
[エクセル]
という変数には Excel.Application
がセットされています。
[エクセル].ActiveWorkbook
とすればアクティブなワークブックを得られ、
[エクセル].ActiveSheet
とすればアクティブなワークシートを得られます。
sample02.wsf に出てくるサブルーチンや関数について解説します。
Excel関連のサブルーチンや関数とかなり類似しています。
文字どおりドキュメントを開くためのものです。
引数として "test.docx"
などのファイル名を指定します。
"C:\work\test.docx"
のようなパス名でも大丈夫です。
そのファイルは、存在していても存在していなくてもかまいません。
つまり、新規作成でも既存のファイルのオープンでも、どちらでもOKです。
この「開く」でファイル名を指定しておくことで
あとで [ドキュメントを保存]
のときにファイル名を指定しなくて済みます。
Wordの起動は、暗黙のうちに行うので意識しなくて大丈夫です。
ドキュメントを開いたあと、次のグローバル変数がセットされます。
なお、[ドキュメントを開く]
はドキュメントオブジェクトを返します。
なので厳密にはサブルーチンでなく関数です。
[ドキュメントを保存]
は、あらかじめ指定されていたファイル名で
ドキュメントを保存します。「上書き保存」に該当します。
別の名前で保存したいときは
[ドキュメントを別名で保存] "work.docx"
のような1行を書きます。こちらは「名前を付けて保存」に該当します。
別名で保存した場合、その別名がデフォルトの名前になります。
なので、次に[ドキュメントを保存]
を実行すると、
別名の方で保存されます。
[ワードを終了]
は、すべてのドキュメントを閉じてからWordを終了します。
その際い、ドキュメントの保存の処理はしません。無条件にCloseします。
サンプルスクリプトには出てきませんが、
[ワード]
という変数には Word.Application
がセットされています。
[ワード].ActiveDocument
とすればアクティブなドキュメントを得られ、
[ワード].Selection
によって選択部分またはカーソルのある部分を得られます。
juseフォルダの下には次のファイルがあります。
juseというフォルダは、適当な場所にフォルダごとコピーして下さい。
どこでもかまいませんが、Publicフォルダ(通常は C:\Users\Public
)の下に置くことをお勧めします。
Juse.wsf を実行すると「コマンド入力」の場面になるので
半角のスラッシュ記号 ‘/’ を入力してエンターキーを押します。
これで送るメニューに Juse が登録されます。
再び同じ操作をすると、今度は送るメニューから Juse が消去されます。
送るメニューに Juse が登録されている場合
エクセルを動かすためのスクリプトを作成し(たとえば test.txt)
Explorer上でその test.txt に焦点を当てた状態で
送るメニューの Juse を選ぶと test.txt がスクリプトとして実行されます。
test.txt の置き場所(フォルダ)はどこでもかまいません。
test.txt にはwsfスクリプトに出てきた「おまじない」は必要ありません。
たとえば下の4行の記述だけで大丈夫です。
[ワークブックを開く] "test.xlsx"
[ワークシート].Range("A1").Value = "Hello"
[ワークブックを保存]
[エクセルを終了]
wsfの「おまじない」を書くのが煩わしい場合に利用してみてください。
Juse.wsf を実行して「コマンド入力」の場面になったとき
半角の疑問符 ‘?’ を入力してエンターキーを押します。
すると、Juse.wsf があるのと同じフォルダに Juse_help.txt が書き出されます。
疑問符の代わりに help の4文字でもかまいません。
Juse_help.txtには JuseOffice.vbsで定義されている関数やサブルーチンについて
簡単な説明が書かれています。
半角の疑問符だけ、あるいはhelpの4文字だけを書き入れたファイルを用意して
Explorer上でそのファイルに焦点を当てた状態で送るメニューの Juseを選択すると
やはり Juse_help.txt が書き出されます。
この場合は Juse.wsfと同じフォルダではなく、
Explorerで開いているフォルダに書き出されます。
ヘルプファイルには、たとえば下のような記述が含まれています。
Function [ワークブックを開く](FileName)
ワークブックを開く。[ワークブック], [ワークシート]をセット。
ヘルプファイル中の全角「*」で始まる行は分野を示す者です。
次の者があります。
最後の「その他」には、たとえば下のようなものがあります。
Function [ファイル名の一覧](wildName)
Sub [ファイルを削除](FileName)
~ 以上 ~
Copyright (C) T. Yoshiizumi, 2020 All rights reserved.