VBA|おすすめできないマクロの記録とは?使わない方が良い理由を解説

おすすめできないマクロの記録とは?
エクセルにはマクロの記録という機能があります。
簡単に言うと「ユーザーの作業を記録してくれる」機能です。
マクロの記録というぐらいなのでマクロなのですがおすすめできません。実は多用禁物の機能です。

マクロの記録とは
マクロの記録とはどんな機能ですか?という方向けに以下リンク先で動画を使って説明しています。

マクロの記録を紹介したばかりですがここでお願いです。
この機能を使って開発業務を行うのは絶対にやめてください
・・・しかし規制は出来ないので世の中にはマクロの記録で作られたデータが存在してしまいます。
- なぜマクロの記録はダメなのか
- なぜマクロの記録を使って業務を行うのはダメなのか
- マクロの記録の有効な使い方とは
3つのポイントをもとにマクロの記録について説明していきます。
なぜマクロの記録はダメなのか
そもそも何でマクロの記録はダメなのでしょうか。
色々あるのですがシンプルにこれです。
そのままだと使いものにならないから
具体的に言うと簡単な単発操作ならコピー出来ますが都度データの量が違う様な仕事には向きません。
もう1つダメな理由を挙げます。自動で生成されるコードは無駄が多いです。
このコードを覚えて勉強する事はおおすすめしません。
ネットや書籍、動画やスクールなどのコンテンツの中にマクロの記録を使ったものは無いです
マクロの記録で生成されたコードを覚えても実質勉強の積み上げにならないという事です。
これが「そのままでは使い物にならない」という事です。
マクロの記録では根本的にコードの作りが違う
マクロの記録とコードを自作するのは根本的に作業のとらえ方が違うので別の考え方が必要です。
結論としてはマクロの記録を使って良いのは一部の人たちだけです。
繰り返しますがネットの情報や書籍、動画等ではコードを自作する時の書き方しか紹介していません。
マクロの記録でコードを覚えると必ず行き詰まります。すぐ止めましょう。
なぜマクロの記録を使って業務を行うのはダメなのか
これも簡単な話です。「使い物にならないから」です。
マクロの記録は作業の再現です。という事は繰り返し処理も条件分岐も出来ません。
マクロの記録で用意されたコードでは繰り返し処理が用意できません
コードが書ける人は1から1000行目まで・・・という様なコードが書けます。繰り返し処理を使います。
これから起こることを作業に組み込むことが可能です。
しかしマクロの記録でこの作業をするには一回は手作業で1000行目までの作業しないといけません。
毎回1000行目までの作業じゃない時はどうしましょうか。
加えて1000行目以上の範囲の仕事をする時は再度手作業で記録をとらないといけません。
こうなると「もはや手作業よりキツい手作業」です。
マクロの記録で用意されたコードでは条件分岐も用意できません
マクロの記録は条件分岐も出来ません。
「もし○○なら・・・」というような処理は思考が入ってますので当然出来ません。
全てまとめるとマクロの記録では業務を再現する事は出来ません。
必ずと言っていいレベルで欠陥が生まれます。
マクロの記録の有効な使い方とは
簡単かつ単発作業のコードを調べたい時だけ使用しましょう
単発作業のコードを調べる時だけ使いましょう。
調べて出てくるコードは無駄が多いコードです。
自力で無駄を削ることが出来る人だけに許される作業です。
これが出来ない人はマクロの記録は使うべきではないです。
できることなら使わないでください
有効な使い方とは・・・というテーマですが実質「使わないでください」というのが回答です。
マクロの記録を辞書代わりに有効に使えるのは一定の経験がある人だけです。
一例を紹介
この2つのコードは上と下で同じ作業をしています。
簡単な作業ですがこれだけでも文字数が随分違います。
'マクロの記録で書かれたコードです
Range("K6").Select
ActiveCell.FormulaR1C1 = "おはようございます"
Range("K6").Select
Selection.Copy
Range("K7").Select
ActiveSheet.Paste
'自作のコードです
Range("K6") = "おはようございます"
Range("K6").Copy Range("K7")
VB- セルK6に「おはようございます」と記入
- セルK6の値をコピー
- セルK7に貼り付け
色々あるのですが分かりやすいところで行くと Select が無駄なコードです。
都度オブジェクトを掴むので実行速度としては遅いです。
遅いのですが仕事が単発なので遅さを気にすることすら難しいです。
例えば以下のようなコードが2つあったとします。
- 0.1秒で完了する自作のコード
- 0.3秒で完了するマクロの記録で生成されたコード
この2つは同じ作業をする為のコードだと想定しましょう。
- 0.1秒の仕事を1000個積み上げると100秒です。
- 0.3秒の仕事は1000個積み上げると300秒です。
1つの作業同士で比べると0.2秒の差ですが積み重ねると200秒の差になります。
マクロの記録で書かれたコードは積み重ねるほどうまく機能しないという事が分かります。
反復作業では大きな差が出ます
コードが自作出来る人は複数の作業の集合体を構築出来ます。
- マクロの記録で1000行分の作業を記録したコード
- マクロを自作出来る人が書いた1000行分の作業をループ処理で対応するコード
この2つは速度と作業量に雲泥の差が表れます。
実際は自作したコードで1000行分の仕事を実行した場合内容によりますが100秒もかかりません。
実行時間はおそらく数秒です。コードを書くのも数分で終わる事でしょう。
一方でマクロの記録でコードを用意するとコードを用意するだけで数時間かかる事でしょう。
実行時間は分かりません。
マクロの記録で1000行分の仕事を記録なんて効率が悪い事やった事がないからどうなるのかは不明です。
(多分コードの行数が多すぎてエラーになります)
加えてマクロの記録で用意されたコードは反復性の無いコードしか生成出来ません。
まとめ
マクロの記録について紹介しました。使い方によっては便利な機能ですが開発時に多用しない様にしましょう。