MS Officeで役立つVBAの技:これだけは覚えとけ!

文:Susan Harkins(TechRepublic)
翻訳校正:村上雅章・野崎裕子
2008/02/18 08:00

ユーザー部門に対してVBAの教育を行うことで、彼ら自身でちょっとした業務の自動化を行えるようになり、IT部門とユーザー部門の両者にメリットがもたらされる。本記事ではそういった教育に欠かせないコーディング上のベストプラクティスを解説している。

データ型を用いてデータを検証する

 ExcelやAccessに馴染みのあるユーザーであれば、データ型によってデータの値が制限されるということは知っているはずだ。ここでは、ExcelやAccessに馴染みのないユーザーのために、簡単な例を挙げ、それが意味することを解説しておこう。

 図Dの簡単な手続きは、VBAが不適切なデータを評価しようとした時に何が起こるのかを示すものだ。このコードはVariant型の値をやり取りするようになっているため、VBAは引き渡された値が期待通りのものであるかどうかを判断できない。図Eは、テキストが引き渡されてしまった際の問題を防ぐための、数値データ型(整数型)の使用方法を示したものである。この場合、ユーザーはこういったエラーが発生した際に、どう対処すべきかを知っておく必要がある。

図D 図D データをVariant型で宣言すると、誤ったデータをチェックできなくなる

図E 図E 適切なデータ型を宣言することで、コード内で不適切な値が評価される前に、その値を拒否できるようになる

 また、目的を達成するうえで最も小さなデータ型を選択するよう、ユーザーに教えておこう。例えば、Boolean(ビット、あるいはYesかNoか)値しか必要ない場合、Booleanデータ型を用い、非Boolean値が紛れ込んだ際に発生するエラーを取り扱うようにしておくのだ。

 VBAのVariant型はどのような値でも格納することができる。しかし、できるだけVariant型を使用しないようにすべきであり、その使用はユーザーが未知の値を取り扱わなければならない場合のみに限定すべきである。VBAは必要に応じて、一連の内部規則に従ってデータ型を自動的に変換するということを忘れてはならない--ユーザーが明示的にデータ型の変換を指定しない限り、VBAがVariant型を変換する方法を制御することはできないのである。

エラーを取り扱う

 いくつかの手続きをうまく記述できたのであれば、ユーザーは自らのシャツに、「Super Coder」(スーパーコーダー)を表す大きなSを書き入れてもよいぐらいにはなったかもしれない。しかし、たとえユーザーが自信満々であったとしても、彼らのコードにはエラーが含まれているはずだ。ユーザーに対して、バグの存在しないコードは称賛に値するものの、達成不可能な目標であるとあらためて伝えておこう。

 エラーは以下の3種類に分類することができる。

  • コーディング上のエラー:これは解決が簡単だ。VBEは変なコードを発見すると警告してくれる。
  • ロジックのエラー:これは警告されることのない陰湿なエラーであり、ユーザーにとってより見つけ出しにくいものである。コードは実行できるものの、思った通りに動作してくれないのだ。
  • 実行時のエラー:これは、コードに記述されたとおりに実行できない(例えば、指定されたフォルダにファイルが存在しない、あるいはドライブにCDが入っていないなど)場合に発生する。ユーザーはこういったことを想定し、実行時のエラーを取り扱うことができるものの、それらの発生を防ぐことはできない。実行時のエラーが発生すると、VBAはエラー番号と詳細を表示し、該当手続きを異常終了させる。ユーザーは[デバッグ]をクリックすることで該当モジュールを開き、問題の原因となっているステートメントを調査することができる。これはデバッグを行う際には役立つものの、通常の使用中であればわずらわしいものである。このためユーザーには、以下のような一般的なエラー処理ルーチンを含めておく方法を教えておくのがよいだろう。
Sub|Function name()
   On Error GoTo errHandler
   何らかのコード
   Exit Sub|Function

 errHandler:
   MsgBox Err.Number & ":" & Err.Description,
   vbOKOnly, "Error"
End Sub|Function

 このルーチンは、VBAがデフォルトで行っている以上のことをほとんど行っていないものの、VBAによる処理の異常終了を抑止することができる。より複雑なエラー処理ルーチンも記述できるものの、初心者にとってはこれがよい出発点になるだろう。ユーザーのレベルが上がるにつれて、エラーをテストする方法や、エラー処理ルーチンに適切なコードを追加する方法も教えるようにしよう。

さあ、ユーザーに取り組ませよう!

 ユーザーにVBAの基本を教える場合、優れたコーディングプラクティスというものについても教えるようにしよう。こういったアドバイスは万人受けするものではないし、一部の人たちは無視するかもしれないものの、真面目に経験を積んでいく人の中には、こういったことを教えられたことに感謝する人も出てくるはずだ。

この記事は海外CNET Networks発のニュースをシーネットネットワークスジャパン編集部が日本向けに編集したものです。海外CNET Networksの記事へ

記事の感想やご意見をコメントでお寄せください(CNET_IDログインが必要です)
ログイン パスワードを忘れた方  |  新規登録
米フォレスター・リサーチ社 シニアアナリスト Jeremiah K.Owyang氏を迎え、同氏が提唱するソーシャルテクノロジーを効果的に活用方法するための方法『POST』を日本で初めて紹介する注目のリアルイベント
  • 新着記事
  • 人気記事
  • 特集
  • ブログ