Mutable_Yunの業務改善ブログ

業務改善や生産性向上のブログです。自動化の手段として、VBAやRPAの勉強に役立つ解説をしています。

VBA 中級者から上級者へ① 脱中級への手順

今回から中級者を上級者の入り口まで連れていくシリーズです。以前、プログラミング初心者を初級者の入り口まで連れていくシリーズをやりました。本当の入門、初心者はExcel VBA 入門 本当のプログラミング初心者の業務効率化の始め方とその第一歩①(全5回)からご覧いただければと思います。

中級はずっとココで止まっている人が多い印象です。初級から中級と違い、中級と上級の間にスキルの壁はありません。誰でも上級になれます。しかし、長く中級に止まる方も多い為、さっさと上級にステップアップする為の正しい考え方を解説していきます。

この記事は中級です。
レベルについてはExcel VBAの実力(レベル)を定義してみる 初心者~三段をご参照ください。

目次

中級者とは

「定義してみる」の記事で定義した中級は下記のような実力でした。

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

傾向:知らないことはインターネットで調べれば何とでもなる、と気づき始めた段階。インターネットと本以外の、本家の情報ソースは日本語で書いてあってもほとんど理解出来ないが、自信をつけ始めている。

定義と言うより特徴ですが、ご容赦下さい。この段階の人は、小さくてもいいのでVBAで一つ何か完成品を作ったことがあります。その事がとても大きく、自信につながっています。分からない事は調べればいい、と思っているので知らないことがある事が怖くなくなってきています。

このレベルの「調べる」はネットで検索をすると言う意味が大半で、オブジェクトブラウザを調べるとか、マクロの記録を正しく使って引数やプロパティ名を調べると言った事はほとんど無いと思います。

また、想定が甘いのと、コードを書くことで精一杯で、使う人の気持ちを考えたコードを書くところまで至ってません。よって、遅いし、実行時エラーがかなりでます。このあたりをクリアする頃が、中級を卒業する頃です。

中級者から脱するのに掛かる時間は、取り組み方に左右される

このブログで定義している中級と上級は、実はスキル的なところは余り変わりません違うのは経験値と思いやりです

経験値

経験値とはどれだけ失敗から学んだか、と言う事です。エラーを起こさず上級以上になる人などいません。【断言】。上達の過程でより重要な事は、失敗からどれだけ学ぶ事ができるか、と言う事です。同じようなエラーを繰り返していては、なかなか質の高いツールを作る事は難しいでしょう。どれだけたくさん作ったか、よりも、一つ一つの失敗を糧に、どれだけ丁寧にコーディングに取り組んだか、と言う事が大切です。

思いやり

Excel VBA エキスパート スタンダード公式テキストによると、8章の扉に下記の記述があります。

<中略>
エラーへの対応に必要なことは、技術やテクニックでは無く、優しさと思いやりです。

だそうです。私もその通りだと思います。つまり、ユーザーが使うときにどのような動作をしうるかをどれだけ想定できるか。相手の立場になって考える、とは思いやりそのものですよね。中級者のうちは分からない事を調べてコーディングするだけで手一杯でなかなか相手を思いやる所まで行かないと思います。

私自身そうでした。エラーへの対応は、想定外のことが起きたときの処理を丁寧に記述する事です。ということは、本来のツールの動きとは違うこと、問題が無ければ実行されないコードを書くことです。うまくいけば必要ない、実行されないコードを書くのが時間の無駄のような気がしていました。でも、自分が使う立場に立ってみれば、ツールが壊れた、とか「私の操作が悪かったんだろうか」とか思ってしまいます。

ユーザーにこのような思いをさせるうちは、やはり中級止まりだなと思います。まずは、無駄になるかもしれないコードだけど、ユーザーのあの人のため、と言う思いを持つところから初めて見ませんか?

中級を卒業するためにやること

ここまで来れば中級を卒業するためのステップが見えてきます。要するに、ユーザーが使用するときにエラーが出ない、使い勝手の良いツールが作れるようになればいいのです。

エラーをトラップすると言う事

エラーのことは例外処理とも言います。想定通りでなかった事が起きることからです。この例外を適切に処理するためには、エラーが起きるところで適切なコードを記述する必要があります。そのためにはエラーをトラップすることが必要です。トラップすると言うのはエラーを捉えると言うことです。エラーを避けるには大きく分けて2つの方法があります。

  1. エラーが起きる原因を事前に取り除く
  2. エラーが起きた時に、エラーそのものをトリガーにする(単にトラップと言ったら普通はこっちの意味)

どちらが好ましいかは場合によって異なりますが、起きることが想定されるエラーの場合は事前に原因を取り除く方が好ましいことが、やや多いように思います。理由は、メンテナンスの時に、エラーそのものをトリガーにすると、どんなエラーを想定したコードの記述になっているのかがわかりにくいことが多い為です。

想像力を働かせて、わざといろいろやってみる

ゲームでは、ユーザーが変なことをしてもよっぽどのことが無い限り、想定外の動作は起きません。これは徹底的にエラーが無いかを点検しているからです。主人公がひたすら壁に向かって走り続ける、とかですね。ツールが一通りできたら、想定外の事をいろいろやってみましょう。

想定外といっても難しいですよね。想定外だからそもそも想定できない訳ですから。まずは押せるボタンは全て押すことから始めましょう。メッセージボックスを出したときに「OK」や右上の「×」を押したり、ファイルを選択させる画面で「キャンセル」を押したり、と言った事です。

トラップしたエラーを丁寧に処理すること

エラーがトラップできたら、そこからはその後の処理を丁寧に記述していきましょう。丁寧に記述するとは、ユーザーが求める対応を想定しながら書くと言うことです。例えば、ユーザーが選択した入力データが間違っていたら、そこで処理を止める、と言ったような事です。エラーが出たり、そのまま処理が続行されるのは最悪ですね。もし単にプログラムの実行を止めるだけで無く、再度データを選び直せるようにしておくともっと良いでしょう。丁寧に処理するとはこういったことです。

せっかくトラップしたエラーなのでとことん丁寧に取り扱いましょう。エラーの処理の部分のコードが本来の自動化プログラムの記述より長くなってしまうこともあるんですよ。そんなもんです。この感覚になれてきたら、だんだん職人気質になってくる気がしますね。大げさかもしれませんが。

リリース前のテストを充実させる

以上は、動作においてエラーを出さないと言う事でした。動作自体があっていても、元のデータが間違っていることもあります。ヘッダの行がいつもと違ったり、ある列が無かったり、極端に行数の多いデータだったり、逆に空っぽのデータだったり、いろんなイレギュラーパターンのデータを入力して実行してみましょう。

経験値を積めば、自然に思いやりが芽生えてくる

上記を繰り返していると、やがて職人のようになっていきます。相手を思いやる気持ちが習い性になってきて自然にできるようになってきます。VBAのプログラミングが人格まで育てるとは素晴らしいですね。

1回目はこれで終わります。次回から、具体的なエラーのトラップ方法や、良くあるエラー処理について見て行きましょう。