【VBA】マクロを書くときのTips

「煩雑なコピペ作業を自動化」のタイトル通りにコピペ作業を自動化するマクロを書くことを目的に5つの記事を書きましたが、ここから自分の業務を楽にしてくれるようにマクロを進化させるのは自分しかいません。
プログラムを書いていくには、そもそもどうやって書くのだろうかと調べることも必要になってきます。そしてバグはつきものですし、意味不明なエラーがでることもしばしばです。ここではプログラム作成中に役立つTipsをいくつか載せていきます。


tkchnmn77.hatenablog.com

どうやって書くのかわからないときは「マクロの記録」

「マクロの記録」とは

他の言語であれば、何か処理したいことがあるけど書き方がわからないときはググるか書籍を探すかすると思いますが、マクロでは独自の方法があります。それが「マクロの記録」です。
記録を開始してからそのエクセル上で実施した操作を自動でプログラム化してくれるため、この記事では触れていない
 - 罫線の引きたい
 - フィルタを付けてソートしておきたい
 - 条件付き書式を追加したい
などといった、普段エクセル上で実施している操作をプログラムで書くとすると?を知ることができます。
じゃあそれで全部自動化できるじゃんと思うかもしれないですが、セルの指定先などが固定でループ処理もできないので、これだけで完成されたマクロを作ることは難しいです。また、マクロの記録は逐次的にプログラムに落としていくので、例えば間違って関係のないセルを選択してしまうとそれもコードとして反映されてしまいます。無駄な処理が多くなってしまうので、あくまでヒントとして使うことが無難です。

「マクロの記録」の使い方

まずは開発タブの「マクロの記録」を押しましょう。


f:id:TKchnmn77:20201106100503p:plain


すると以下のようなポップアップが出てくるのでOKで大丈夫です。


f:id:TKchnmn77:20201106100510p:plain


後はプログラムを見たい操作をやってみましょう。
無駄な操作をすると余計なコードが多くなるので、ゆっくり慎重に操作しましょう。
「マクロの記録」だったボタンが「記録終了」になっているので、操作が終わったら押しましょう。


D2セルを選択してE2セルにペーストすると以下のようなコードになります。


f:id:TKchnmn77:20201106100538p:plain


[D2セルを選択→選択されたところをコピー→E2セルを選択→ペースト]となっていますが、E2セルにD2セルの値を代入と書けば1行で済んでしまう処理です。ヒントとして利用して、いろいろ試して改善していきましょう。

デバッグ実行で何が起きているのかを知る

VBAでもデバッグ実行を行うことができます。コードの左側をクリックすればブレークポイント(プログラム実行時に処理を中断する場所)を置くことができ、ステップイン(メソッドの中まで入っていく)、ステップオーバー(メソッドの中には入らずに次の行へいく)などで少しずつプログラムを実行することができます。


f:id:TKchnmn77:20201106110230p:plain


f:id:TKchnmn77:20201106110248p:plain



デバッグ実行をするときには変数の中身を見たい時が出てきます。数字が入っているはずなのに文字列が入っているので計算できないといったエラーが出てくる、何が入っているのだろう?といったようなときです。
[表示 > ローカルウィンドウ] で変数が見れるウィンドウを表示することができます。

エラーでたときにやること

  • エラーメッセージをググって何がいけないか、理解しようとしましょう。(結果わからないこともあります)
  • エラー発生箇所のコードをじっくり見ましょう。スペースが抜けていたり変数名が間違っていたりしないでしょうか。多くの場合は自動で整形してくれるのですが、たまに直してくれないことがあります。
  • エラーが発生するとデバッグモードになり、エラー発生箇所で止まります。変数の中身などを見てみましょう。
  • エラーハンドリングをプログラムしているとハンドリングされてしまい、デバッグモードにならない場合もあります。その場合はブレークポイントを置き、少しずつ処理を実行して、エラー発生箇所を特定するところから始めましょう。
  • プログラム名を書いている Sub () で黄色くなってしまったら、VBAで解釈できないメソッド名を使っている可能性があります。スペルミスをしていないか確認しましょう。
  • なんだかよくわからないエラーのときは、エラー発生箇所の前にエラー発生箇所で処理しているブックやシートのActivateを入れてみましょう。Activeでなかったことから生じたエラーかもしれません。


VBAも多くの人がプログラム例や書き方をネット上で書いてくれているので、勉強には楽な言語といえます。「煩雑なコピペ作業を自動化 #1」でも述べましたが、身近な人にありがたがられるスキルですし、何より自分の作業が楽になるので、ノンプラグラマの人こそ是非、身に着けてみてください。