僕の考えた最強のExcel-VBA学習法

ここ日本における事務作業、ことPCでの作業において、Excelはその圧倒的シェアによりデファクトスタンダードの地位を揺るぎないものにしています。巷で話題の神エクセルにはじまり、なかには写真をメールで送信するのに、わざわざExcelへ貼り付けてから送ってくるExcel原理主義な猛者もいらっしゃいます。 我々Excel-VBAer(注:VBAを駆使する者たちの意)にとっては生息しやすい環境と言えます。

私個人的には、このような状況を鑑みると、どのような業界、業種であろうとも会社がカネをかけて自社内にExcel-VBAerを養成すべき。絶対に投資以上のリターンが得られる。と思っていますが、そのようなところは極めて少数派でしょう。

よってExcel-VBAerになるには、自己投資による学習を要します。 VBAをマスターするとどんないいことがあるの?については、わかりやすく解説しているサイトがたくさんありますので、Google先生におたずねください。一言で言うと「半日かかっていた作業が5秒で終わる」でしょうか。仕事でExcelを使わなければならないのであれば、VBAをマスターすることで得られるメリットは計り知れません。

ということで、私がオススメするExcel-VBA学習法を実体験をもとにご紹介します。

プログラミング言語の源流を知る

VBA?Excelのおまけ機能的なあれでしょ?
関数のちょっとすごいヤツでしょ?

ちがいます。VBAは歴としたプログラミング言語です。

その気になればOSすら制御できるすごいヤツなんです。これをまったくのプログラミング初心者がさわれる、そして見よう見まねで使える、しかもどの会社にもPCにも入っている、というところが他の言語には絶対にマネできないVBAのストロングポイントですが、同時に「何でうごいているのかわからないけど、ネットからコピペしたやつでうごくし、まぁいいか」的な、昔の私のようなコピペVBAerを量産する要因ともなっています。

私がコピペVBAerを脱したきっかけは、Excel-VBAの手引き書でも、VBAの解説サイトでもありません。何冊かVBA関連の本も読みましたが、どうもピンと来なくて、相変わらずコピペ6:自作4くらいのコードを書いていました。

きっかけはVBAとはまったく関係がない(と思っていた)趣味ではじめたJavaの入門書でした。それがこちら。

カバーが汚くて恐縮ですが、もうかれこれ5~6周しているのですり切れてしまったためです。この本でJavaの基礎を学んだことでExcel-VBAのコピペコードの意味が、うそのようにわかるようになりました。「そういうことだったのか!」と理解したときの感動は忘れません。私と同世代には通じるでしょう、ロマサガの新技を覚えたときの「ピコーン」ってやつ、あれが出ました。

私のプログラミング歴(趣味)はVBA(コピペ)から始まり、Java→PHP→Pythonときて、今ではすっかりPythonにはまっていて、Java、PHPはほとんどさわりませんが、最初にJavaを選んだことは、今思えば大正解でした。以降の言語を学ぶにもJavaの知識が大いに役に立ちました。

Javaは現代のプログラミング言語の根幹を流れる思想を知るには最も適した言語だと思います。そしてこの思想さえわかってしまえば、あとはそれぞれの言語における作法にだけ注意すればよく、新しい言語にもすんなり入っていけます。

例えるならば、Javaは日本語の標準語、PHPは関西弁、Pythonは東北弁みたいな、日本語さえ話せれば、地方の方言もだいたい何を言っているのかわかりますよね。あとは言い回しが違うところを覚えればいい、これに似ています。そしてVBAも方言の一種なのです。

結局、何が言いたいかというと、少々乱暴かも知れませんが
Excel-VBAをマスターしたいのなら、まずJavaをやりましょう。

VBAだけを学ぼうとするのは正直オススメできません。なぜなら、残念ながらVBAはもはや斜陽と言わざるを得ません。Excelのマクロ言語はいずれPythonに置き換えられるのではないか、とのまことしやかな噂もあります。そうなった場合でもJavaをたしなんでおけば、Pythonだろうが何だろうが鞍替えが容易いです。また、いずれやってくるプログラミング教育必修世代と渡り合うためにも、Javaを知っておいて損はしないでしょう。

なお、宗教上の理由によりJavaをさわれないかたは、Java→C#に読みかえても大丈夫です。ただし最強の入門書が使えなくなりますのでご注意ください。

ちなみに、最強の入門書は4冊シリーズで、すべて学ぶと趣味でいじくりまわす分には申し分ないくらいのなんちゃってエンジニアになれます。オススメです。

またカバーがボロボロでみっともないですが、この中で一番リピートしているのは、実はSQLの入門書です。SQLで本格的なデータベースを操れるようになっておくと、様々な場面で使いどころがあり、できることの幅が広がります。

【2020.05追記】
いつの間にかPython版が出てました。とりあえずGET。基本Javaと同じ内容ですが、今までネットの情報だけでやっていたので知らなかったPython独自の用法がちょくちょく書いてあり勉強になりました。Pythonをメインにしたい人にはいいと思います。VBAerにも関数やオブジェクト、モジュールの章は参考になります。

オブジェクトを理解する

Javaを勉強していると、オブジェクト指向という言葉が必ず登場します。これを理解したら、もう9割終わりです。オブジェクト指向こそ、現代プログラミング言語の根幹をなす思想です。もちろんVBAも例外ではありません。

オブジェクト指向とは何なのか、をGoogle先生で調べても、おそらく10人が10人違うことを言っていると思います。オブジェクト指向は「概念」なので形がないのです。故に人それぞれ捉え方が違います。

VBAはオブジェクト指向ではないと主張する人もいます。答えはありません。その人がそう思っているならそれが正解なのです。ですが、皆さんが概ね共通している認識としては「プログラムをオブジェクトという単位で考えると簡単だよ」でしょう。私は、オブジェクト指向とは、と聞かれたらこう答えます。

では、Excel-VBAでのオブジェクトとは何かというと、それはブックであり、シートであり、セルであり、VBAで操作するものはすべてオブジェクトなわけです。そしてこれらは自らができることをメソッド、自らの状態をプロパティとして保持しています。これはJavaやその他の言語でいうオブジェクトの構造と何ら変わりません。

オブジェクト同士が互いのメソッドやプロパティを呼び出しながらプログラムが実行されていく様子をイメージできたら、もうVBAをマスターするのも遠い未来ではありません。


オブジェクト指向について最後に、概念を知るということが、どれほど重要かが、ひっじょ~によくわかる一節が、最強の入門書にありますので、引用します。「知識こそが人類の至宝」なのです。もっと早くにこれに気がついていたら学校で勉強をサボるなんてありえなかったんですけどね…。後悔先に立たず。

私たちは日常生活でも「考え方」を変えることによって生活を便利にしています。たとえば「ゼロ」や「マイナス(負数)」の考え方です。
【中略】
「なんにもないこと(ゼロ)」や「なさすぎること(負数)」を数字として扱う「考え方」を導入したのは、人類の長い歴史の中でもわずか1400年ほど前からです。ゼロや負の数という考え方を導入する前と後で世界が変わったわけではありません。人間が「考え方」「捉え方」「概念」を変えただけなのです。
しかし、この新たな「考え方」の導入によって、人間は世界のさまざまなものを数字として把握、制御することが可能になり、ITのみならず社会生活を発展させる基盤となっています。

スッキリわかるJava入門 第二版 中山清喬/国本大悟・著

公式リファレンス、オブジェクトブラウザーを使う

Excel-VBAでつまずいたら【Excel VBA [やりたいこと]】でGoogle先生に聞くのが一番簡単です。上位にきているページを2つ、3つ見ていけば正解がわかります。

中には若干怪しいコードが載っているサイトもありますが、数をこなしていくと、「あぁ、これは違うな」という区別がつくようになってきます。初心者のうちはこれで良いです。

しかし、今やオブジェクトを理解したあなたは、このようなことをする必要はなくなりました。なぜなら、どの解説サイトでも絶対に超えることはできない、創造主自らがVBAを解説しているサイト、そう、公式リファレンスがあるからです。

Excel Visual Basic for Applications (VBA) リファレンス
Excel ソリューションの開発に役立つ概念の概要、プログラミング タスク、サンプル、およびリファレンス。

公式リファレンスは、間違いなくVBAの最も詳しい解説サイトです。ところが初心者はおろか中級者ですら寄せ付けない強力なオーラを発しています。これに打ち勝つにはオブジェクトについての理解が不可欠です。

あなたが「オブジェクトについて理解できたな」と思ったら公式リファレンスを眺めてみましょう。「あっ…読める」となっていたら、めでたくVBA学習は卒業です。試しに、適当に思いついたオブジェクトのメソッドの引数に何があるか、どんな型で渡して、どの型で返ってくるのか調べてみましょう。難なくわかるようならば、もう何も心配ありません。


VBAにはもう一つ、オブジェクトの詳細を調べる方法があります。それはエディタに内蔵されている、オブジェクトブラウザーです。

こちらはリファレンスほど細かく書いてありませんが、オブジェクトのメソッド、プロパティ、型、引数、イベントをすぐに知ることができます。前に使ったことがあるけど、これどうだったっけ、という場合にサッと調べることができます。

以上の2つの公式ツールを使用することで、間違いのないコードを書くことができます。同時にオブジェクトに関する知識も蓄積されていきます。公式ツールをベースに、さらにかみ砕いて解説しているサイトを参考にする、というのがいいとこ取りのベストな方法かと思います。

まとめ

いずれ、AIが本気を出すと朝出社したら「OK、Google!今日使う会議の資料をアレとコレについてまとめて参加者全員のタブレットに配信しといて」でこと足りるようになるんだと思います。プログラムをコンピューター自身が書く時代が来るはずです。

ただ、そうなるまでにはまだ時間がかかるのではないでしょうか。もうしばらくはVBA、Pythonといった人間が書くプログラムをコンピューターに実行させることが、もっとも現実的かつ効果的な業務効率化の手法としてあり続けるのでしょう。だとしたら、これを使わない手はないはずです。今日からでも自分の代わりにPCがはたらいてくれるのですから。

おわり。