まずは簡単な入門書から始める
VBAを初めて勉強される方はなんと難しいなのであろうと感じるかと思います。覚えることが多い!なんて感じた方もいることでしょう。
VBAは、完全なオブジェクト指向言語ではありませんが、かなり近い言語体系です。私も勉強し初めのころはなかなか理解できず、また、上達しませんでした。
今は、プロフェッショナルとまでは行きませんがそれなりに簡単なマクロ程度ならすぐ作り上げることが可能です。
Excelは一応、Excelファイルを自動的に操作することに特化した言語ですので、実はある程度書き方が決まってくるところがあります。それを掴めるようになるまでが時間がかかりますが、それさえ掴んでしまえば割と簡単に組むことができるようになりますので諦めずに頑張りましょう。
わしもC言語でマイコンの勉強を学生時代にしましたが、それでも難しいと感じたくらいですから初めてチャレンジする方はできるようにならない感覚に陥ってもそれは能力がないとかではありません。
まずは、基本的な命令を覚えてしまってください。
例えば
- ThisWorkbookときたら、ThisWorkBook.Worksheets(“シート名”)~
- if 変数=△ then Endif
- for 変数=0 to 変数 next 変数
などは覚えるしかありません。
VBAという言語が目的が限定的だからこそ書き方も限定的
ある程度経験してくると、決まった書き方というのが自分の中で確立していきます。私の場合の例をいくつか紹介します。
オブジェクトに参照をする
ほとんどの場合、私はこのコードから始めています。
操作対象のワークブック、操作対象のワークシートが始めのうちは今まさに開いてるブックで、さらに今まさに開いてるワークシートでしょう。とすると私の場合、
という書き方を大体どんなマクロでもしています。
言うまでもありませんが、Privateで宣言しているのは、不必要に変数のスコープ(変数が有効な範囲のこと)を広げないようにするためです。始めのうちはとりあえずPrivate宣言でいいと思いまし、上達してくるとむしろPrivate宣言の変数を多用します。
相当やりこんでも使用しない命令が多々あります。
書き方が決まってくるということは、使用する命令文もある程度決まってきます。私の経験上使用頻度の高い例えをいかに記載します。
- ThisWorkbook.Worksheets(“シート名”)
これは先に説明した通りほぼ使用します。主な使用例はブックやシートの参照です。自ブック(マクロを記載しているブック本体)は、本来こ
のような命令はいりません(常に有効、つまりアクティブなため)。しかしプログラム規模が大きくなってくると、違うブックや他のブックのシートを参照するなんてことは多々あります。そんな時に今一体どこのブックのどのシートを参照しているのか分からなくなることがありますので、明示的に参照をしといたほうが後々管理しやすいプログラムになります。私は実務において、300~400のブックをマクロで開いて一つのブックに転記するというマクロを組んで業務に使用していた時があります。
- if文、for文は必ず覚える
これも必須です。実はif文とfor文が使用できればそこそこのプログラムを作り上げることができます。この文の使用方法を必ず丸暗記でいいので覚えましょう。
- 変数の型をいくつか覚えて、使い方もある程度決めてしまう。
VBAたくさんの変数の方がありますが、大体使用する方は決まっていて、integer,long,stringあたりが頻度が高いと思います。後は、オブジェクト型のRangeだと思います。とりわけ、数値を扱うならLong、セル内の文字を扱うならStringです。昔のパソコンは性能やメモリの関係から必要以上に大きな変数は使用するべきではないといいましたが、今は別で、数値はとりあえずLong型でいいでしょう。宣言した変数をどの型にするか迷ったときはString型で大体カタがつきます。
あまり使用しない命令、辞めた方がいい記載方法
私の経験上から、以下の通りです.
- ActiveCellなどはほとんど使用しない.使用しなくて済むなら使用しない方がいい。
理由は簡単です。プログラムの流れをハックしていないと一体どこのセルだか分かりません。作ったマクロを時間が相手からまた見るときがありますが、読解に時間が掛ります。作成した本人が理解しにくいようなプログラムは最悪なプログラムです。
- Public変数、Variant型変数
初心者がやりがちなことですが、Public変数は極力やめた方がいいです。もう後で変数の管理や処理の流れ分からなくなります。上級者ほどPublic変数は使用しません。また万能なVariant型ですが、変数の方からどのような値が入って、どういう処理をしてというのが理解しにくくなります。私もめったに使用しません。最大の難点は入力時のインテリセンス機能が使用できません。これはかなり大きい損失。上級者は二次元配列を意図的に利用するときに使用します。
- go to ~
強制的にある場所に飛ぶ書き方です。悪い書き方の典型例で、私は何年もVBAをやった経験がありますがこれを使用したことはほぼないです。上級者は、エラーがあった場合に補足する時などにエラートラップという形で使用する程度です。知らなくてもいいくらい。