ゆんの業務改善ブログ

①生産性向上 ②業務改善 ③自動化 について情報発信しています。VBAプログラムは本当の初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。

Excel VBAの実力を絶対評価で定義する|初段~四段

 今回はVBAによるプログラミングの実力(レベル)を定義したい思います。

 

ネットでの質問などを見ると多くの人が「初心者です」と自称しており、本当の初心者が自信をなくしてしまうのでは無いか、と懸念しています。初心者の称号がインフレし、実際の実力がデフレを起こしているのです。これではいつまでたっても「初心者」です。

 

そこで、VBAプログラミングの実力を相対評価では無く絶対評価で定義してみたいと思います。

f:id:mutable_yun:20200111155001p:plain

 目次

  

以下、定義というより特徴や説明になってしまっていますが、わかりやすさを優先して進めていきたいと思います。各ステージで次に取り組むべき事も紹介していきます。

 

入門者

【定義】

これから勉強しようと思っている方。

【傾向】

この記事を読んでいる方は入門者以上がすでに確定です。やる気がある人とあるフリをする人の2つに分かれます。ずっとアマゾンでどの本がいいか検索するのに時間を使っていて、実際にはコード書いたことが全く無いかほとんどありません。

【次に取り組むべき事】

まずは一行VBAのコードを書いてみましょう。 手を動かすことが大事です。どのように手を動かせば良い課については下のリンクで解説しているのでよろしければご参考にして下さい。

 入門者向けの記事を見る

初心者

【定義】

VBE(Visual Basic Editor VBAのコードを書くためのアプリケーション)を開いたことがあり、「こんにちは」とセルに書き込んだりメッセージボックスを出したことがある。

【傾向】

なんとか「こんにちは」と表示させるだけのプログラムは書けた段階で、初めてのプログラミング入門書を買う頃です。初心者向けと書いてある本を買ったつもりが難しくて読み進められないと言う落とし穴があります。そのため、買った一冊目の本が読みこなせずに挫折するというパターン陥りやすいです。この段階を突き抜けられるかが一つのポイントとなります。

【次に取り組むべき事】

次に取り組むことは、本当の初心者向けの良書に出会う、教えてくれる人を見つけるなど、勉強を進めるにあたり分からないところを解決できる環境を確保することです。プログラミング自体が初めてだけど、エクセルは普段から使っていてなじみがあるという初心者向けの1冊としてたった1秒で仕事が片づくExcel自動化の教科書を推薦します。この本は2色刷で見やすく、自動化ツールを作成するのに必要かつ十分な文法を過不足無く解説しています。見開きページで必ず図表が入っており、一行一行のプログラムコードの意味だけで無く、処理の流れを理解しやすいように考えて作成されています。VBA文法の全体像が俯瞰できる文法マップも魅力です。

 

 

初級者

【定義】

「このくらいなら手作業でいいじゃん」位の小さな、しかし、実際に使うことが出来るものを一つ作ったことがある。

【傾向】

どんなに小さくても、ひとつ作り上げたことがある、と言う事がとても重要です。VBAが面白くなりはじめている頃で、次々といろいろな事を調べて知識を増やしている頃です。エラーが出たときにどこが間違っているのかが分からず、そこで時間を使ってしまうことが多いのが特徴です。

【次に取り組むべき事】

初級者が次に取り組むべき事は、とにかく沢山VBAを書く事です。エクセルを使った作業は職場にいくらでも転がっているので、どんどん自動化ツールを作ってみましょう。この段階ではまだまだ技術が未熟で、いろいろなエラーが出ます。しかし、エラーが出た理由を調べて修正する過程で着実に経験値が上がっていきます。

中級者

【定義】

「ファイルを選択して下さい」で右上の×を押されたり、エラーが出て作業中のブックが中途半端な状態で保存されてしまったり、いろいろと失敗を繰り返している。

【傾向】

知らないことはインターネットで調べれば何とでもなる、と気づき始めた段階です。インターネットと本以外の、Mircosoft本家の情報ソースは日本語で書いてあっても理解ができない場合が多いです。しかし、沢山の自動化ツールを作り、徐々に自信をつけ始めていく段階です。

【次に取り組むべき事】

この段階で取り組むべき事はよりエラーに強いプログラムを書けるようになることです。自分だけが使うちょっとした便利ツールであれば構いませんが、人に使ってもらうツールを作れるようになるためには滅多なことではエラーで処理が止まることがないツールが開発できるようになる必要があります。それをするには経験と思いやりが必要です。丁寧なバグ出し、エラー処理の記述です。具体的な手順については下のリンクで解説していますのでよろしければご覧下さい。

 中級者向けの記事を見る

上級者

【定義】

自分の作ったものを人に使ってもらえるように努力している段階。

【傾向】

エラーがでないプログラミングを心掛けることは当然になっており、処理にかかる時間やコードの流れや変数名の付け方、メンテナンスのしやすさなど、より細かな点に気を配るようになり始めるころです。

職場の仲間や上司から頼りにされ始め、一部の人に「あいつはすごい」と思われている場合が多いです。そのグループからPCに詳しいと勘違いされてパソコンの設定を頼まれて困るといった事もしばしばです。一方で自分のショボさが分かってきたのでだんだん謙虚になっていきます。

【次に取り組むべき事】

傾向のところで説明したような気配りが当たり前になると共に、実装できるようにする事です。経験だけではここで頭打ちになりやすいため、ここで一度きちんと正しい知識を入れておく必要があります。この段階で標準モジュールの正しい使い方などやプログラムの処理の流れ、高速化のための知識といった知識を正しいものにブラッシュアップしておくことで、この後の上達度合いが変わってきます。

VBAに関する書籍やネット上の情報は文法に関する解説は沢山ありますが、標準モジュールの本来的な意味合いや処理の流れ、高速化について体系的に説明したものは多くありません。下リンクの記事にここから先の上達方法についてまとめているのでよろしければご覧下さい。

 上級者向けの記事を見る

初段

【定義】エクセルのブックとエクセルアプリケーションの違いが分かっている。配列やテキストファイルを内部的に開くと言った手作業では行わない処理も実装できる。

【傾向】

大抵の業務は自動化できるますがプログラムは洗練されているとはまだまだ言えません。変数や定数の定義する場所がまちまちだったり、リテラルがコードの中に残っていることにあまり違和感を感じていません。クラスモジュールは使ったことが無いし、そもそも必要性を感じていない段階です。

一方、一通りの自動化はできる為、自分の実力がある程度客観的に見られるようになっています。ネット上の自称「初心者」はこの層を中心に分布しているようです。

【次に取り組むべき事】

プログラムを洗練させていく段階です。まずはリテラルをプログラムから排除したり変数や定数の定義ルールを一貫させるなど基本を大切にするようにしましょう。ここを卒業するとOLEやAPIといったエクセル以外のアプリケーションを動かす為の技術を身に付けていく必要があるため、その準備段階としてクラウスモジュールの勉強を開始する必要があります。

しかし、残念ながらVBAのクラスモジュールの使い方を解説した本は非常に少なく、ネット上でもほぼ見かけません。そして、ネット上の数少ないクラスの使い方の解説はとても理解するのが難しいです。VBAのクラスを理解するには是非、下記のリンクを参考にしてもらえればと思います。

 初段向けの記事を見る

 

二段

【定義】:クラスやオブジェクトの概念が理解出来ていて、オブジェクト指向を取り入れたプログラミングができる。前提として標準モジュールの本当の役割を理解している。

【傾向】C言語のエンジニアなどPC自体に詳しい人が紛れ込んでくる領域です。彼らはVBAの関数を「知らないけど調べたら分かる」というスタンスです。他言語から流入してきた人達はVBAのことを重たい言語、遅い言語だと思っている場合があります。その原因は2つに分類することができ、C言語などコンパイル言語として実際に遅いということを知っている人達と、単に高速化の施策をとっていないだけの場合があります。後者は相手にする必要はありません。

一方、 VBA上がりの人はVBAの関数やエクセル特有のメソッドに詳しいものの、OLEやAPIと言った、他のアプリケーションを使いこなせず、ここにきて本当にやりたいことがなかなかできません。このレベルをクリアして次にいけるかどうかが一つのポイントとなります。

【次に取り組むべき事】

 次に取り組むべき事はズバリOLEオートメーションという技術を使えるようにすることです。これを取り入れる事で、いままでエクセルしか操作できなかったVBAで、OutLookやPowerPointと言った他のアプリケーションを操作できるようになります。自動化ツールでできる範囲が大きく広がるのと、既存ツールの利便性にも厚みを持たせることにつながります。

OLEオートメーションについては個別のメソッド、例えばメールを作成する、と言ったサンプルコードをネットで探すことはできますが、どうすればOLEオートメーションの技術を身に付けられるかと言う事について言及したサイトは見かけません。そこで、次のステップに移っていこうと考えている方は下記のサイトを参考にしてもらえればと思います。 OLEが実装できるようになるようにしっかりと勉強の手順を解説しています。

 二段向けの記事を見る

三段

【定義】

OLEオートメーションを使ってOutLookやPowerPointなどのエクセル以外のアプリケーションをExcel VBAから動すことができる。オブジェクト指向が理解出来ているので、OLE自体に抵抗はない。公式ドキュメントを読み解く力や複雑な処理の流れをどれだけスムーズに書けるか、人のコードを読む力がどれくらいあるかで強い三段と弱い三段分類される。

注:メールを配信する機能をネットからのサンプルコードのコピペで実装している人はここには含みません。この記事で取り扱っているのは自由自在に実装するプログラミングの実力の定義です

 

【傾向】

コピペで作ってきたのか自分でコードを書いてきたかが今頃になってコーディング力に影響を与えてきます。また、調べる力によっても実装力に差が出てきます。そのため、同じ三段で、同じOLEを使うという技術がありながら、実装に掛かる時間が大幅に異なります。

三段になると社内講師など人に教える場面が出てきます。その時に他人のコードを読んで何をしようとしているのか理解したり、エラーの理由が分かる力にも差が出てきます。これは、三段になるまでのプログラミングに対する姿勢、努力の積み重ねが実力に現れてきていると言えます。

一方、初段以下の人から見ると強い三段と弱い三段の実力の違いはわかりません。

【次に取り組むべき事】

強い三段になって四段への足場を固めることが三段で取り組むべき内容です。具体的には、スクラッチでプログラム書くというプログラミングの基礎体力を鍛えたり、本家Microsoftの公式リファレンスを積極的に参照すると言った事です。取り組み方を変えることで実力は着実に付いていきます。

 

 

四段 

【定義】

Windows APIを利用する事ができる。プログラミングの難しさがプログラムを書く難しさよりも、むしろ他のアプリケーションと連携したときのバージョンの違いや動作の安定性である事を知っている。そのため、むやみにAPIを使おうとも思っていない。

 

【傾向】

大概のことは知っているし、実装もできる。社内講師としてVBAを教えることができるが、説明が分かりやすいとは限らない。オブジェクト指向など自分の中で当たり前の言葉を初心者に使ってしまう詰めの甘さがある。

 

五段以上

【定義】Excel VBAの限界を感じていたが、新たな可能性を模索し始める。スーパーファミコンレベルのゲームをエクセルで作り始める。

 

【傾向】頭打ち感。これ以上突き抜けるには相当努力が必要。業務効率改善の観点ではこれ以上の上達は不要と思われるが、好きなんだったら勉強をつづけたらいい、と言うレベル。(私はこのレベル以上の人に教えることが出来ない。)

 

五段以上は私が達していないので定義できません。ゲーム作ったり、Windowsの効果音で音楽を作ったりする人たち。プロはマイクロソフトMVP(Most Valuable Professional)などで、VBAを業務改善の一環では無く、VBAそのもの×営業力だけで食べていける人たちです。

 

 

 

<関連記事>