Officeが無くてもVBAは学べる
VBSを使ってVBA学習
家にOfficeが無くても、VBAの学習を諦める必要はありません。これから紹介するVBScript(以下VBSと表記)を使えば、擬似的にVBAの学習を進めることができます。
VBSは、Windowsに標準搭載されていますので、手元にWindowsパソコンがあれば特に何も買うことなく実行できます。Macを使っている方はごめんなさい。
VBSを作成する方法は簡単で、単にコードをテキストファイルに入力し、拡張子を「.vbs」として保存するだけです。あとはダブルクリックすると実行されます。
作成から実行までの流れをgifアニメーションで紹介します。
VBAとVBSの違い
以下が、サンプルで作ったコードです。これは入門教材で最初に紹介する「あいさつマクロ」と同じ内容ですが、コードの表記でいくつかVBAと違いがあるので説明します。
Sub Aisatsu() MsgBox "こんにちは" End Sub Call Aisatsu()
まず、VBAでは「あいさつ」としていたマクロ名を、ローマ字に直しています。VBSではマクロ名に日本語を使えないためです。その他、変数名にも日本語が使えなくなっています。
次に、Call Aisatsu()という1文を最後に追加しています。VBAではマクロを定義すれば実行ボタンで呼出可能ですが、VBSでは最後に「Call マクロ名()」としてマクロを呼んでやる必要があります。
学習中、わざわざファイルを分けるのが面倒であれば、同じファイルに複数のマクロを書いても問題ありません。その場合、以下のように実行したい方のマクロ名をCallすれば、そちらだけ実行することが出来ます。マクロ名を重複させることはできません。
Sub Aisatsu() MsgBox "こんにちは" End Sub Sub Aisatsu2() MsgBox "さようなら" End Sub 'あいさつ2だけ実行 Call Aisatsu2()
他には、コード入力支援が無いので大文字小文字などは自分で使い分ける必要があります。
VBSで入門教材の学習を進める方法
VBSを使用する場合も、このサイトで配布している入門教材が活用できます。以下に、VBAのコードをVBSで実行するための注意点を、ページごとにまとめました。
ページ | 注意点 |
---|---|
P1~P5 | 前提知識なので、目を通してください。 |
P6~P13 | Excel固有の話なので、読み飛ばしてかまいません。 |
P14 | これが最初のマクロです。前述のように、マクロ名を英語にして、Callで呼び出すように書き換えてください。Excelの入力支援の話は、VBSには関係ありませんが、VBAとの違いということで覚えておいてください。また、このページで出てくる文字列という言葉は重要ですので覚えてください。 |
P15~17 | Excel固有の話なので、読み飛ばしてかまいません。 |
P18~22 | P14と同じ方法で実行可能です。 |
P23 | スマートあいさつマクロは、VBSでは実行できません。Select文はVBSにもありますが、高度な表記はサポートされていないので、ひとつ目のCaseで失敗します。VBSでSelect文を利用したい場合は、インターネットなどで調べてください。 |
P24 | コラムのページなので、興味があればどうぞ。 |
P25~26 | Excel固有の話なので、読み飛ばしてかまいません。 |
P27 | P14と同じ方法で実行可能です。 |
P28~30 | 変数の説明をよく読んでください。ただし、変数名に日本語が使えるのはVBAの場合ですので、VBSには当てはまりません。以後、日本語の変数が出てきたら英語に書き換えてください。 |
P31~35 | Rnd関数を使用する場合、その前の任意の行に「Call Randomize()」を挿入してください。そうしないとランダムになりません。 |
P36~38 | P14と同じ方法で実行可能です。 |
P39~42 | 無限にあいさつマクロをVBSで実行すると、強制終了しか方法がなくなります。41ページを参照し、excel.exeではなく、wscript.exeを探して終了させてください。もしwscrpit.exeが無ければ、cscript.exeを探して終了させてください。 |
P43~45 | P14と同じ方法で実行可能です。 |
P46~48 | 変数宣言はVBSでも出来ますが、VBSの変数は型を持たないため、As Integerを書くとエラーになります。単に「Dim x」としてください。また、数値型と判断させるための方法は、ゼロを足すか、CInt関数を使ってください。例) x = CInt("-2") 逆にCStr関数を使うと、文字列として判定させることができます。 |
P49~51 | Option ExplicitはVBSでも有効ですので活用してください。 |
P52~53 | 配列の宣言に「Dim a(1 to 3) As Integer」が使えません。代わりに、「Dim a(3)」と書くと、3つのデータが入る配列ができます。ただし番号は0から始まるので、0、1、2となります。したがって、a(1)をa(0)に、a(2)をa(1)に、a(3)をa(2)に書き換えてください。ループの際も、ひとつ番号が少ない点に注意してください。 |
P54~55 | イミディエイトウインドウが使えないので、FizzBuzzなどを作る際は全部の結果をつなぎ合わせたものを変数に入れてから表示させてください。毎回MsgBoxを出すと、100回クリックするはめになります。九九なども同様にしてください。ループの中で変数に入れる方法は空の変数Answerを用意して、Answer = Answer & x & vbNewLineなどとします。vbNewLineは改行の意味です。ただし、MsgBoxの表示領域には限界があるので、改行にすると表示しきれません。改行のかわりにカンマなどの文字で代用すると良いです。 |
P56~74 | Excel固有の話なので、読み飛ばしてかまいません。 |
P75~76 | 練習問題の解答を掲載していますが、このままではVBSで動作しませんので、これまでどおり修正してください。 |
P77 | VBAのオススメ書籍を掲載しています。ここには掲載してていませんが、VBSについてもわずかながら書籍が出版されていますので興味があれば手にとってみてください。 |
残りの学習
ここで読み飛ばしたExcelの部分については、インターネットカフェなど、パソコンを時間貸ししてくれる場所を利用する手もあります。また、職場のパソコンを学習に使う許可が得られたら、業務時間外に残って学習しても良いと思います。