VBAの上達のためには、マクロ記録機能をやめるのが一番のおすすめです。どんな点に違いが出るのかをご紹介します。
マクロ記録機能で一連の流れを作り、IFやloopなどを組み込んで”らしく”していては、いつまでたっても「よく分からない実行エラー」を脱出できません。
A1セルの値をC1セルにコピペする。こんな簡単なマクロにも現れてくる特徴があります。
初心者とバレて悪いことは何もないのですが、マクロ記録機能しか使えないことがバレるとさすがに、今後の上達のポテンシャルがバレてしまいます。
初心者が記録しただけだと分かるマクロ
Sub Macro1()
Range("A1").Select
Selection.Copy
Range("C1").Select
ActiveSheet.Paste
End Sub
- A1セルを選択
- 選択しているA1セルをコピー
- C1セルを選択
- 選択しているC1セルにペースト
もしかしたら不自然さを感じない人もいるかもしれません。それはマウス操作を思い浮かべながら読んでいるからです。それこそがマクロ記録機能の弊害だと私は思います。抽象的に考えられなくなってしまうからです。
ちなみにソースコードは4行です。
初心者なりにちょっといじったけど、ここまでと分かるマクロ
Sub Macro1()
Range("A1").Copy
Range("C1").Select
ActiveSheet.Paste
End Sub
先のマクロをちょっといじれる人は、こういう感じでしょうか。
- A1をコピーする
- C1を選択する
- 選択しているセルにペーストする
マクロ記録機能で作ったあと、手を加えてみた心意気は良しとして。
しかし2行目のselectをやめるとどうしても3行目でエラーになることを回避できず、苦肉の策で放っておいた。そんな心境が読み取れます。
とはいえ、4行ではなく3行になりました。
ちゃんとコーディングしたと分かるマクロ
Sub Macro1()
Range("C1").Value = Range("A1").Value
End Sub
A1の値をC1の値に代入する。
これがRange(“C1”) = Range(“A1”) となっていてもOKでしょう。(個人的にはあまり好きではありませんが)
コードの量は1行です。
コードが少ないほうがバグの入り込む余地も少ない
ちゃんとコーディングしたマクロのメリットはこういう点が挙げられます。
- コードが少ない分、バグの入り込む余地も少ない
- バッファを使わない方が動作が速い
- 値だけをコピペしたいのか罫線やフォントの色までコピペしたいのか、ちゃんと制御できる
- なにより動きが速いものになる
コードの行数が多いということはそれだけバグが入り込む余地も多いということです。実際、何をやっているのか作者自身がよく分かっていないのでは、何のきっかけでおかしな動きをしても不思議ではありません。
また、1セルのコピーくらいでは違いも分かりませんが、バッファにコピーしてからペーストする動きはどうしても動きが遅くなります。処理時間が500倍、1000倍なんてザラです。何千行、何万行の処理をすると10分くらいレスポンスが返らない、とか。
まとめ
- VBAマクロを使えるようにするにはマクロ記録機能は封印する
(基本ができた後、リファレンス的に使ってみるのはありだと思います) - 記録したマクロを改修するのが上達の機会だと思うのをやめる
「そんなこと言ったらはじめの一歩さえ踏み出せない」と思うかもしれませんが、そんな人こそまずは一度、関連記事を参考に、エクセルをコマンド操作で動かすような感覚を味わってみてください。
エクセルをコマンド的に操作できるようになったら、後はそれをまとめて書くだけの話なんです。
今回は、上達するためにはマクロ記録機能を封印しましょう、という話でした。
コメント