どうやって勉強しようか?
私が初めてVBAでプログラムを組んだのは、Excel5.0(Windows版)でした。
それまでは、C言語やC++というプログラミング言語しか作ったことがなかったのでなかなか慣れなかったものです。
しかし、現在はそれなりにプログラミングできるようになりました。(まあ、見る人が見ればまだまだ低レベルでしょうが)
それなりに苦労しながら学んだわけですが、最近ではどう勉強すれば覚えられるのかというものもおぼろげながら見えてきました。
そこで、ここではそれを少し紹介して、みなさんの勉強の足しにして頂ければと思います。
以降では、次の事について書いていきます。
Excelを知る!
マクロってどうやれば作れる? VBAってどうすればできる?
嫌にならないように割り切る
VBAの文法、ステートメントを知る
オブジェクトってなに? どんなものがあるの?
コツコツと覚えていく
一体何のこっちゃ!というのもありますが、少しづつ紹介していきますのでそれまでは内緒。
Excelを知る
まあ、改めて言うまでのこともないのですが、あなたはExcelを使ったことがありますか?
ほとんどの方は「イエス」でしょう。
もし、「ノー」(例えば、使ったことがないのにいきなりVBAでマクロを作ろう(あるいは作らないといけない))の方は、まずExcelを使った感触を掴んでおくべきです。
どんなことができるのか、どんな機能があるのかをよく見ておく方が良いでしょう。
まあ、使ったことがないとたいしたものはできないと言い切るつもりはありませんが、それほどできる人ならCなりC++なりJavaなりで作った方がよっぽど良いのではないかと思います。
Excel VBA のよいところは、BASIC言語でExcelを自由自在に操ることができるところなので、そのためには是非Excelを使いましょう。 VB(Windows上でのプログラム開発ツールです。VBAの兄弟のようなものです)でプログラミングする開発者の中にはVBAは難しい気がすると言う 人もいますが、これはVBA自体が難しいわけではなく(VBA自体は簡単です)、Excelがよく分からないからです。
だから、既にExcelを使い込んでいる人ならば、VBAさえ覚えてしまえばそういうプログラマ以上のものを作れる可能性があるということです。楽しみですね、頑張りましょう。
マクロってどうやって作るの
これについては、前回(作ってみよう!)を見て下さい。簡単なマクロを作っています。
嫌にならないように割り切る
さて、これからVBAを勉強していきますが、その前に少しだけ一つだけ言っておきたいことがあります。
それは、欲張らずに割り切ると言うことです。
VBAを使って簡単にExcelを操作できると書きましたが、これは簡単に始めることができるだけであって簡単にマスタできる訳ではありません。
他の人に配付できるようなちゃんとしたものを作ろうとする場合、しっかりと設計してエラー処理などもきっちりと入れないといけないし、性能や信頼性も考慮しないといけません。
また、場合によっては、VBAのみでは実現できない処理や適さない処理を他の手段で作成して連係させたりと、色々難しいことがあります。
しかし、自分の作業を効率化したり仲間内で利用するためのものを作るのに、これ程の時間と労力を使う必要はありません。エラーが発生しないような状況で使うようにすればエラー処理は少しで済むし、性能なんかも余程の事がない限り我慢できるでしょう。
ここで言いたいのは、凄いものを作ろうとかいいものを作ろうとか気合いを入れずに、時間と労力をかけるだけのメリットがあるのかをよく考え、ないものなら思いきって削ってしまおうということです。自分のできることだけ(したいことだけ)していけばいいんです。
これをくり返していく内に、より良いものが作れるようになるでしょう。
ただし、作ったものをたくさんの人に配付しようとか販売しようと言う場合は別ですよ。
VBAの文法、ステートメントを知る
必要最小限のものから少しずつ段階的に説明していきましょう。
これが最小限のマクロです。何が最小って?
マクロ記録の時に何も操作していないでしょう。だから、中身が何もないんです。
では、少しずつ説明しましょう。
Option Explicit
これは、変数(今度説明します)を強制宣言させるオプション定義です。
これがないと、変数の宣言がなくてもプログラム中の使いたいところで新しい変数を使えますが、これを記述することにより、宣言していない変数はエラーになるようになります。
これについては、変数の説明の際に改めて説明しましょう。
Sub MyMacro()
End Sub
このSub~End SubがMyMacroマクロになります。これらは、マクロのはじまりと終わりを表しています。つまり、マクロMyMacroを実行すると、Sub~End Subの間に書かれている命令が実行されていくと言うことです。
'で始まる緑色の部分
'で始まる部分はコメントです。この部分は何も実行されません。
この部分にマクロの補足説明を書きます。上の例では、Sub~End Subの間は全てコメントなので、実行しても何も起きないと言うことです。
- 最小単位のマクロ
では、まず最小単位のマクロを作ります。Visual Basic Editorで新規に作成する手もあるのですが、ここではマクロ記録を使います(楽なんで)。
作り方は既に説明していますね。ここでは、MyMacroという名前で作っています。
今回は、何も操作せずにすぐに記録終了ボタンを押します。
以下の画面は、Visual Basic Editorで内容を確認したところです。 - メッセージボックスを表示してみる。
では、少し中身を入れてみましょう。次の様に入力して下さい。Sub MyMacro()
msgbox "こんにちは!" 'この行を入力してみます。
End Subどうですか?次のようになりましたか?
msgboxがMsgBoxにかわっていますね。
これは私のミスではありませんよ。
VBAでは、その行を入力してからreturnキーを押した時にその構文のチェックが行われます。その時に、キーワードはあるべき姿(大文字を含んだ形)に自動的に変換されます。これを利用するために全て小文字で入力したんですね。
つまり、returnキーを押した時に小文字のままだったら、VBAのキーワードとして認識されていない、もう少し分かりやすく言えば綴りが間違っていると言うことを表します。
みなさんも出来るだけ全て小文字で入力するようにしましょう。
ただし、これはキーワードだけです。他の部分には関係ありません。
それじゃ、このマクロを動かしてみましょうか。マクロを実行する方法はいくつかりますが、それについては後日説明します。今回は手ごろな方法で実行しましょう。
まず、先程のマクロのSubからEnd Subまでの内のどこかをクリックしましょう。
次に、「実行」-「Sub/ユーザフォームの実行」を選択します。(これで、カーソルのあるマクロが実行されます。)
どうですか?表示されましたか?
では、少し変更してみましょう。
MsgBoxの行を
MsgBox "こんにちは!", Title:="もみじ屋"
に変更して実行してみましょう。
どうでしょうか?ウィンドウのタイトルがかわりましたね。先ほどと違うのは, Title:="もみじ屋"の部分ですね。最初の"こんにちは!"と、Title:="もみじ屋"の部分を引き数といいます。そしてMsgBoxは関数と言います。
ここでは、2つの引き数をMsgBox関数に渡して、メッセージボックスを表示させたわけです。
では、このMsgBox関数をヘルプで調べてみましょう。Visual Basic EditorのOfficeアシスタントにMsgBoxを指定して検索させましょう。そして、MsgBox関数を選ぶと、説明が表示されます。先ほどの コードと見比べてみて下さい。なんとなく分かると思います。Buttonsという引き数もあるので、これにいろんな値を渡してみましょう。
分からない場合は、気軽に御質問下さいね。
今回はここまで。次回以降も続けて書いていきますので、御期待下さい。
出来るだけ分かりやすく書いているつもりですが、不明な点や分かりにくい部分もあると思います。是非、お気軽に質問下さい。
特に、初心者の方。