ゆんの業務改善ブログ

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

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

f:id:mutable_yun:20191128225128j:plain
この記事はVBAで自動化ツールの作成を目指している非エンジニアの会社員を読者に想定しています。どんなに小さくてもよいので一つ完成品を作ったことのある中級者を上級者の入り口まで連れていくシリーズです。

目次

中級から上級を目指す

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

中級者とは

このブログではVBAの中級は下記のような実力だと定義しています。

中級者
【定義】

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

【傾向】

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

つまり、難しいことをするというより、よりエラーが発生しにくい一歩上の品質のツールを作れるようになりつつある段階と言えます。

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

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

経験値

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

思いやり

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

脱中級への手順まとめ

この記事をまとめると、下記の様になります。

  • 中級を脱するのにかかる時間は、取り組み方に左右される
  • 具体的に中級者を脱した状況とは、ユーザーの使い勝手にまで配慮が及ぶ優しさがあるかどうかである
  • 経験を積めば自然に思いやりが芽生えてくる

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

<関連記事>