VBAを使ってマクロを作るときの悩みとして、
・同じようなコードの記述を何度もしなければならないことがある。
・メンテナンスを行う必要が出た場合、多数の箇所を修正しなければならない。
といったようなことが挙げられます。
こうした悩みに直面した方も中にはいらっしゃるのではないでしょうか?
私もVBAでコードを記述している際、同じような課題に直面したことがあります。
こうした課題は、「変数」を使用することで解決できる場合が多いです。
この変数を利用することによって、「マクロの記録」では作れない、柔軟なマクロ作成をすることが可能にもなります。
今回は、マクロ作成を便利にするためには欠かせない、「変数」について解説していきます。
変数とは「データを一時的に格納しておく箱」
変数とは、「あるデータを一時的に格納し、記憶させておくための箱」のようなものを指します。
言葉だけではわかりにくいですが、ここでの「あるデータ」には、
・文字列
・数値
・オブジェクト(例えば、セルを指定するRangeオブジェクトやWorksheetオブジェクトなど。)
が含まれています。
変数について図式化すると、下記のような内容になります。
とは言っても、実際に「変数」はどのように考える必要があるのでしょうか?
もう少し詳しく、計算式を例に次項で見てみましょう。
計算式から変数について考えてみよう
変数について、いきなりVBAで考え始めると混乱する方もいらっしゃるかと思うので、まずは下記の計算式で考えてみましょう。
100 × 2 ÷ 5 + 1000
この計算式を解いてみてくださいと言われた場合、どのように計算して答えを出しますか?
まず答えとしては、「1040」という値となります。
では、この1040の値を出すまでに、どのような計算を行うのでしょうか?
下記のように、段階を踏んで計算を行うこととなります。
このように、1040という答えを出すまで3段階の計算過程を踏む必要があります。
これを「小計」という変数を使って計算を行おうとすると、下記のような流れで計算を行います。
少し複雑に見えますが、この「小計」という変数を使って計算を行う工程でのポイントは、
・「小計」という箱を準備し、計算の最初の数値100を格納する。
・計算は「小計」の箱に入っている数値を基に行う。
・計算過程を踏む毎に、その計算結果の数値を「小計」の箱に格納する。
(上記では小計の色によって、小計に入っている数値の違いを表現しています。)
の3つとなります。
ここでは、同じ「小計」という名の変数であっても計算過程が進む毎に小計の箱に入っている数値は異なるのだなという理解を持てるとよいでしょう。
少し複雑ではあった、「小計」という変数を使った計算を今度は「VBA」で表現するとどのようになるでしょうか?
下記のようなVBAコードでの記載となります。
ここでも、変数「Syoukei」には、色を付けています。(実際のVBAでは色はついていません。)
VBAでも同様に、計算過程を経るごとで変数「Syoukei」に格納されている値は変化していきます。
また、上記のVBAコードでは変数「Syoukei」に対して四則演算で計算を行っています。
つまり、この変数「Syoukei」という箱の名前は変わらないが、中身の数値は変化させることができます。
そのため、複雑な数値計算でも変数を使うことでVBAのコードを簡略化することにもつながります。
変数を使うメリット・デメリット
慣れていない方にとっては、「変数ってどうして使うの?」という疑問を抱く場合もあるかと思います。
ここで、変数を使うメリット・デメリットには何があるのでしょうか?
それぞれについて、まとめると下記のようになります。
では、それぞれのメリット・デメリットについて詳しく見ていきましょう。
変数を使うメリット
① 特定の言語やコードを一時記憶しておける。
これは変数の役割にも該当しますが、特定の言語(数値)やコードそのものを変数に格納することができます。
このメリットによって、
・何度も使う言語、数値を変数に置き換え、無駄を省ける。
・複雑なコードを変数を使うことで簡単に使い回せる。
といった使い方が可能になります。
特に「何度も使う言語、数値」を変数に置き換えることによってメリット④にもある、編集やVBAのメンテナンスを行う場合に効果的です。
② 長いコードをわかりやすくできる。
複雑な作業をVBAで記述していると、どうしても1文が長くなってしまうことが多くなります。
そして、その長いコードを何度も書くことになると、モチベーションの低下やミス・エラーの発生にもつながります。
そのため、変数を使うことで長いコードを数文字の変数に格納して、使い勝手を良くすることができます。
例えば、下記のプロシージャを見てみましょう。
ここでは、変数「MaxRow」には、
Cells(Rows,Count, 1).End(xlUp).Row(最終行の行番号を取得するコード)
を格納しています。
また、別の変数「rewriteRow」では、
WorksheetFunction.Match(CInt(txtID.Value), Range(“A1:A” & MaxRow), False)
というコードを格納しています。
それ以降では、変数「rewriteRow」を使って指定したセルに値を代入するコードを記載しています。
これを変数を使わずに作成するとなるとどうでしょうか?
1文がかなり長くなってしまうだけでなく、複雑なコードとなってしまい、ミスにつながりかねません。
変数を利用することで、長いコードを短文化し、使い勝手のよいマクロを作ることができます。
③ VBAのコードが効率的に書ける
②に通じる点もありますが、変数を利用することで長いコードを書く手間を省くことができます。
そのため、VBAのコードも効率的に書くことができ、マクロ作成も効率化することができます。
同じ作業を行うマクロを作るのに、複雑なコードを何度も書いて時間を使うよりも、変数を使ってコードを簡略化して作る方が作業時間の削減にもつながります。
④ 後から編集するときに楽になる。
一度作ったマクロを編集することがないのであれば別ですが、多くの場合は作業工程の変化に合わせて、マクロのコードもそれに合わせて編集する必要があります。
その際に、「変数」を使っておくと変数に格納する言語や数値、コードを修正するだけで編集を行うことができます。
逆に変数を使っていない場合、変更が生じた言語や数値をマクロ全体から探し出して、都度編集することになってしまいます。
どちらが楽かといえば…やはり前者の変数を使った場合ですよね。
また、編集箇所が多いと修正漏れも発生するリスクが高まります。
マクロを作る際は今後変動が起こりそうな数値やコードは変数を使って格納し、コード作成を行っていくのがオススメです。
変数を使うデメリット
① VBAを学習し始めたころにはつまづきやすい。
変数のデメリットに、使い方や考え方の難しさから学習を始めた方にはつまずきやすいということが挙げられます。
普段使い慣れない用語や考え方ではあるので、難しさはどうしても出てきてしまいます。
そういった場合は、
「分解し、図解にして考えてみる」ことがオススメです。
上述での計算過程を図式化してみると、
「各段階で同じ名称の変数には、どのような言語や数値が入っているのか」
というのが分かりやすくなります。
逆にVBE上でコードを眺めながら考えていると、変数の名称は同じである場合は逆に混乱しやすくなります。
変数はVBAを扱えるようになるためには重要なものでもあるので、学習を始めたころにはきちんとマスターしておきましょう。
② エラーが発生する原因になりやすい。
変数を宣言し、コード内で同じ変数を多用するといったことはよくあります。
ただし、作業工程の流れに沿って変数に言語や数値も適切に格納されて行かなければ、エラーの原因にもなってしまいます。
(こうしたエラーはVariant型の変数を使用する場合に発生しやすいです。)
変数はマクロの処理をしている間、その変数にどんな値が入っているのかを探すことは難しいです。
そのため、「イミディエイトウィンドウ」や「ローカルウィンドウ」などを活用し、特定の変数にどんな値が入っているかを確認しながらマクロ作成を行っていくことで、エラー発生の頻度を低減させることもできます。
まとめ
今回は、VBAでマクロ作成を便利にする「変数」について解説してきました。
変数を使いこなすことができるようになると、
・マクロ作成の幅が広がる。
・マクロの作成や編集を効率化することができる。
といったように大きなメリットを受けられます。
しかし、VBAを学習し始めたばかりですと変数の考え方はなかなか難しいものでもあります。
そういった場合、どのように学習していけばいいのでしょうか?
私の場合、
というサイトを活用してExcel VBAの学習を行いました。
Udemyでは、e-ラーニング形式で動画を視聴しながら学習することができます。
コンテンツでは学習しながら実習形式で簡単なアウトプットを繰り返しながら学ぶこともできます。
かつ、「Q&A」という機能を使うことで講師にわからない点を質問することも可能です。
またUdemyはサブスクリプション型ではなく、1コンテンツ買い切り型ですので、月額費用が掛かる訳ではありません。
とはいえ、Excel VBAに関するコンテンツは多くあります。
その中でも、
「変数も含めて、初歩的なところを学びたい!」
「変数の内容や実際の使い方を学びたい!」
という場合、
Excel VBA第1弾エクセルが自動で仕事する!マクロの魔法 文系・非IT職もできるプログラミング
Excel VBA エキスパート認定への道 ~マクロ初心者から資格試験レベルへ &7つの自動化 マクロ を作る15時間
の2つがオススメです。
私も「エクセル兄さんのコンテンツ」で学習してみて、実際にExcel VBAでのマクロを作成することができるレベルまでスキルアップすることができました。
VBAについてさらにスキルアップを目指したい方、これから学んでみようと思っている方は是非活用してみてください!
コメント