業務改善目的でマクロに取り組みだしておおよそ2年、初のプログラム言語であるVBAも今では苦手意識はなくなりました。振り返って見ればの話ですが、そもそもマクロやVBAは目的ではありませんでした。とにかく仕事時間を減らしたい一心でマクロを手段として利用してきました。
結果、私のVBA習得に関するデータは以下の通りです(全て私調べなので超ざっくりです)。
- レベル
脱初心者
- 期間
マクロに取り組んで1年10か月(内、8か月間エクセルに全く触れていない期間有)
- 時間
300時間位(業務中の時間も含めているのでエイヤーです)
スキル習得のチャート
脱初心者(私調べ)がどの位のスキルなのか、できるようになった事を時系列で並べました。関連する記事がある場合はリンク置いています。
右クリックにオリジナルメニュー追加、祝日データを外部サイトからダウンロード、チェックボックスで一括設定、等の機能を無謀にも実装しました。変数 もWithステートメント も理解しないまま、ほぼコピペでマクロ完成です。
当時はオブジェクト 、プロパティ が全く理解できていませんでした。「動くからヨシ!」です。
変数 はいまいち理解できていませんでしたが、社内の業務で繰り返しの操作がある場合は片っ端からこのステートメント を使ってマクロを作成していました。もちろん「動けばいい」の精神です。
社内で需要が多かったのが「帳票に人名を差し込んで印刷する」業務だったのでカレンダー同様、無謀なチャレンジをしました。これも結果はほぼコピペで完成させたのですが、相変わらず変数 も適当、オブジェクト って何ぞ?みたいな状態だったので後から見返した時、自分の作ったマクロが読めませんでした。
ユーザーフォームもこの頃に初めて作成しました。
自分で作ったマクロが読めないのはさすがに…ってことで、基礎知識の勉強を始めました。順番おかしくね?と自分でも思いますが、私には結果オーライでした。実践してわからないところを調べる方が理解が早かったです。書籍もこの頃に3冊買いました。
「オブジェクト変数 またはWithブロック変数 が設定されていません」のエラーによく怒られていました。Setステートメント の要否が判断できず、イライラしていた時にLetステートメント の存在を知りました。以降は、この手のエラーでググった記憶がほとんどありません。
クラス 、メンバー 、インスタンス、オブジェクト /プロパティ /メソッド 、等がおぼろげながら理解できるようになりました。概念もそうですが、用語も慣れないとなかなか頭に入りません。VBAに触れだして時間も経っていましたし、用語「だけ」は聞き慣れていたので書籍や解説サイトを読み解くのもそこまで苦行ではありませんでした。
変数 については、気が付いたらググることがほぼ無くなっていました。書籍やWeb上のサンプルにたくさん触れてきたおかげです。
手持ちのマクロも結構な数になり、再利用をするケースが増えてきました。この頃からプロシージャ の分割や、引数 付のプロシージャ を作成するようになりました。
マクロの処理時間を短くするのに、初めて配列 を使いました。本来は初期の段階で触れておいた方がいい内容ですが、配列 を利用しなくてもセルを使ってマクロが組めるのでついつい後回しになってしまいました。
主にOutlookとScripting Runtimeですが、ちょこちょこ外部ライブラリ を利用するようになりました。参照設定 とCleateObject関数 の違いもしっかり勉強しました。
特に必要に迫られたわけではなく、なんとなく知っておきたかったので作ってみました。クラス /メンバー の概念がおおよそ理解できたのは自作クラス 作成のおかげです。
習得期間は人それぞれ
恐らくですが、一般でいう初心者は卒業できていると思います。で、今までVBAのスキルを磨くのにどう取り組んできたかというと、その時に必要なサンプルを探し、知識が不足していたら補って動かしてきただけです。特別な取り組みはしていません。
冒頭にも書きましたが、私の場合はVBAのスキルを磨くことが目的ではありませんでした。「仕事をはやく終わらせること」が目的です。業務改善にマクロが利用できそうであればそうしますし、VBAのスキルが不足しているのであれば補うだけの話です。マクロ以外に効率のいい手段があるのなら、もちろんそちらを選択します。
自分語りをしている訳ではありません。この記事を読みに来てくれている人のほとんどがそうではないかと思った訳です。「習得期間」が釣り針になりそうな結論ですが、「業務改善の手段としてマクロに取り組んでいるのなら、習得期間は人それぞれ」になります。
手にするサンプルも違えば、その時作るマクロの程度にも差があるでしょう。密度によって習得期間は変わってくると思います。
私の例でいえば、スキルの習得順はある意味めちゃくちゃだし、今後の目標も設定していません。こんなチャートでも業務改善はできていますよ、と皆さんに勇気を与えたかった次第です。VBAのエキスパートを目指す訳ではないのであれば、肩肘張らずに気楽に行ってはいかがでしょうか?
習得期間なんか気にせず、続けることが一番大事です。
VBA習得のコツはザッカーバーグに学べ
最後にVBA習得のコツをお伝えします。それは「とりあえず動くものを完成させる」ことです。変数でエラーがでる、配列がわからない、処理が異様に遅い、などいろいろなトラブルに見舞われてもとりあえず完成させましょう。狙っていた仕様にならなくても「動けばヨシ」の精神です。
小さな完成を積み上げていけば、ある日突然「点と点が線でつながる」を実感できる筈です。いきなり0から100まで線を引くのは、効率は良くても難易度は非常に高いです。
フェイスブック創設者のザッカーバーグの名言です。
「完璧であることより、まず終わらせることが重要だ」