「ふーん。VBAの文法かぁ・・・。」
どうやらVBAというものには大きく3つの文法に分けることができるようです。
ここ最近はエクセルのVBAの勉強をしていました。VBAの勉強をするようになった経緯については以下の過去記事を参照していただければと思います。
今回は、この数週間で自分が学んだ範囲のVBAの知識を備忘録として簡単にまとめていってみます。
VBAは大きく3つの文法に分けることができる
前回の記事では、VBAというのはプログラミング言語のひとつといったことを書きました。プログラミング言語というとどういったイメージがあるでしょうか。
自分がVBAについての本を何冊か読み終えるまでは、「完全に別世界の言語」「難しすぎてわからない」「古文書かな?」といったイメージがあり、自分にはとても覚えることはできないと思っていました。
ですが、『ストーリーで学ぶ Excel VBAと業務改善のポイントがわかる本 』という本を読んでからは自分の今までのイメージが崩れていきました。VBAというプログラミング言語は大きく3つの文法に分けることが出来るようです。以下がそれをわかりやすくした部分の引用です。
p.6
本書にはVBAには、大きく
- オブジェクトに対する操作
- 制御構文
- 関数
の3つの文法しかないと書かれています。確かに3つだけしかないと言われるとなんだか少ないような気もしますが・・・。
この3つの文法についてもう少し詳しく書いていってみます。
オブジェクトに対する操作(プロパティとメソッドの操作)
VBAにおける3つの文法の中で「オブジェクト」というものがあります。これは日本語に訳すと「対象」といった意味になります。つまりエクセル上での対象とは
- セル
- ワークシート
- オートシェイプの「図形」
- ユーザーフォーム
などアプリケーションを構成する要素全般になります。
そのオブジェクトに対して操作を加えられる方法に
- プロパティ
- メソッド
があります。
「プロパティ」とは日本語に訳すと「状態」といった意味になります。エクセル上でのプロパティとは、例えばA1セルに入力された「オブジェクト」の文字の「太さ」とか「色」「大きさ」などに対して、
太くしたり細くしたり、赤色や青色など色を変更したり、対象の文字を20Pの大きさにするなど、対象に対する性質や状態を変化させることが出来る文法がプロパティです。
「メソッド」とは、例えばVBAには「ClearContentsメソッド」というセルの値を消去できるものがあります。また、Copyメソッドを使うと指定したセルを別のセルにコピーすることができます。
以上のようにオブジェクト(操作の対象)に対して何らかの動作を命令できるものがメソッドと呼ばれるものです。
制御構文
制御構文というのは、メソッドをもう一段レベルアップした感じです。例えばVBAにはある一定の条件で分岐処理させたい時に使う「ifステートメント」や、ある処理を一定回数繰り返したい時などに「For…Nextステートメント」という文法があるようです。
例えばマクロの記録だけだと一方通行の作業しか出来ません。けれども制御構文を使えるようになると、「この場合ではA、そうでない場合はBの処理をさせる」とか「この処理を7回繰り返してその間にAが見つかれば次の処理に移る」など様々な条件を加えながら処理をさせることができるようになります。
この制御構文によって柔軟に広い範囲で業務の自動化が可能になります。
VBA関数
エクセルの関数というと合計の「SUM」や平均の「AVERAGE」などを思い浮かべる人が多いのではないでしょうか。自分もVBAの本を読むまではVBAに関数というものが使われるとは全然考えもしませんでした。
VBAにはエクセルのワークシート上で使う関数とは違い、
- 専用の「VBA関数」
があります。例えば「MsgBox」を使うとエクセルの画面上にメッセージボックスが表示できるようになります。
ユーザーに対して印刷するかどうかの質問で「はい」か「いいえ」で答えさせたり、何らかの処理で不具合が生じた時にエラーメッセージが表示される時に出てくるあれです。
他にもVBA専用の関数があり、これらを上手く使うことによって従来では考えられなかった複雑な処理でも自動化できるようになります。
なんでマクロの記録ではなくてVBAが必要なのか
マクロをちょっとでもいじったことがある人ならわかると思うのですが、単純な繰り返し処理を自動化させたいなら非常に便利な機能です。こんな便利な機能があるのになぜVBAなんてものがあるのでしょうか。
それはマクロには「VBAじゃないと出来ない処理」があるからです。いくつかのVBAの本を読んでわかったのは、
マクロの記録だけで実現できるのはVBAにおける3つの文法の中の「オブジェクトに対する操作」だけでは次の二つが扱えないからです。
- 制御構文
- VBA関数
これによって複雑なVBAプログラムをつくることができないとのこと。ですから、より広い範囲で柔軟に業務を自動化できるようになりたい、と考えるのであればVBAの習得は避けられないようです。
まとめ
今までVBAという分野は、経理として何年か仕事をしてきた自分にとっては畑違いであり、全然関係がないものだと思っていました。
そのため、以前購入したVBAに関する本もどうしてもモチベーションが上がらず、途中まで読んでそのままの状態でした。
しかし「論より証拠」とはよく言ったもので、実際にマクロの動作を見せられてその速さと効果を実感した時には「これは自分に必要なものだな」と感じ、ここ数週間で数冊を読み終えてしまいました。
昨今は日本が人口減少期に入り、様々な業界で人手不足が叫ばれています。そのためいろいろな方法で業務の自動化、無人化の試みがなされています。
そのような今後の世界を生きる人にとってVBAという知識は、経理業務や事務作業の自動化などをしていくうえで非常に役立つのではないでしょうか。
コメント