ExcelVBAを使いこなすにはもう一段上のレベルの知識が必要なようです

最近仕事の難易度が一気に上がってきた感じがします。このブログでは以前、ExcelVBAを使う仕事に就いたといった内容の記事を書いていました。

 

それから数ヶ月が経ちますが、最初の頃にも「このレベルのシステムを前職が経理だった人間に作らせるのか・・・」(呆れ)といった感想が出てくるくらいの仕事をふられていました。

 

今の仕事に就く前にExcelVBAについてはある程度勉強してきたということもあって、仮にわからない部分があったとしてもインターネットで調べればなんとかなっていました。

 

しかし、現在取り掛かっているシステムはインターネットで調べてもわからない部分が出てきており、加えて書籍も一般には出回ってはいないようです。

 

というのもExcelVBAを使って「クラスモジュール」や「外部アプリケーションの連携」を扱う必要が出てきたからです。以前は以下の過去記事で自分にはSEの仕事における「上流工程」の知識がない、といったことを書きました。

 

しかし「下流工程」の部分でもまだまだ足りない部分があったようです。そのことについて今後のための備忘録も含めて、簡単にまとめていってみます。

今後、下流工程関連で勉強が必要そうな分野の一覧

現在の仕事から気づいたSEの業務における「下流工程」の実装面で、今の自分に足りない知識をわかる範囲で以下のように一覧にしてみました。

  1. AccessVBAの知識とExcelVBAからAccessVBAを操作する方法
  2. WordVBAの知識とExcelVBAからWordVBA操作をする方法
  3. OutlookVBAの知識とExcelVBAからOutlookVBAを操作する方法
  4. PowerPointVBAの知識とExcelVBAからPowerPointVBAを操作する方法
  5. WindowsAPIの知識とExcelVBAからWindowsAPIを操作する方法
  6. ExcelVBAでIEを操作する方法
  7. ExcelVBAでPDFを操作する方法
  8. ExcelVBAである程度の規模の複雑なシステムをつくるノウハウ
  9. ExcelVBAでグラフや図を操作する方法
  10. AccessVBAを使って簡単なシステムをつくるノウハウ
  11. 『入門レベルでは決して足りない実務に必須のスキルとは ExcelVBA 実戦のための技術』に書かれている「クラスモジュール」、自分でつくる「イベント処理」やそれ以外の知識

 

この一覧を書きながらVBAの範囲がいかに広いか、自分がいかにVBAというものを知らないかを思い知らされました。

 

今まではExcelVBAの勉強をして仕事でもそれ程苦労しなかったので、「結構いけるんじゃないか」と思ったりしていましたけど、現実は全然甘くなかったようです。

 

ExcelVBAの知識は少しはあるかもしれませんが、その周辺の知識は全然なかったということです。

 

でも逆にこういった課題が見つけられたのは良かったと思います。今までは経理の経験から、基本的に使っていたオフィスソフトはExcelが中心だったので、ExcelVBAの知識で十分すぎるくらいだと思っていました。

 

でもシステムを使う人というのは経理の人だけではありません。人事や総務、営業、法務、販売など、いろんな人がいろんなオフィスソフトを使っています。

 

ですから多くの人に幅広く使ってもらうためには、やはり幅広い知識が必要です。今の仕事に就いて、こういった点に気づけたのは良かったと思います。

ExcelVBAにおけるクラスモジュールとは

ExcelVBAを使って仕事でシステムをつくろうとした時に次のような機能が必要な時がありました。

  1. シート上で動的にボタンを生成する
  2. 動的に生成したボタンを制御する。

 

「シート上に動的にボタンを生成する」とは、例えばシート上にボタンが1つあったとします。そこから何らかのイベントによって10個とか100個とか自由に増やしたり削除できたりするようにすることです。

 

通常こういった場合は、シートモジュールなどにボタンに対応した「クリックイベント」を作れば良いのですが、ボタンが1つや2つであればそれに対応したコードを入力するだけなので特に問題はありません。

 

しかし、これがシート上でボタンが増えたり減ったりすると、最初に用意したコードだけでは対応できなくなります。増えるといっても10個ほどのボタンであればクリックイベントのコードを用意しておけばいいかもしれません。

 

これが100個を越えるとか、もしくはボタンごとに動的に別の機能を持たせるとなると話が変わってきます。そうです。この部分で自分にとって壁に当たってしまったわけです。

 

この問題をどうすれば解決できるのかいろいろと調べていると、どうやら「クラスモジュール」の知識が必要なことがわかってきました。自分の中では「遂に来てしまったか・・・」という感覚です。

 

以前『VBAエキスパート公式テキスト Access VBA スタンダード』という本を読んでいたときに、クラスモジュールについて次のように書かれていました。

P.142

クラスモジュールを使用することで、独自のオブジェクトを設計、利用することができるようになります。オブジェクトにはたとえば、フォームオブジェクトのように目に見えるオブジェクトと、DoCmdオブジェクトのように目に見えないオブジェクトがあります。

 

クラスモジュールを使用して設計するオブジェクトは目に見えないオブジェクトになります。

最初この部分を読んだ時は、正直よくわかりませんでした。インターネットで調べてそれらしい情報をあたってみても理解できず、クラスモジュールに関してある程度まとめられた書籍もその時は見つけることが出来ませんでした。

 

「要はVBAを使う人にとって上級者用の知識なのだろう」ぐらいのイメージしかなく、今すぐに理解できなくても大丈夫だろうと思って最近まで放置していたのです。

 

しかしその時のツケというか、まさか自分にとってこの知識が必要となるような状況が来るとは思っていなかったので、困ってしまいました。

 

けれども最近、クラスモジュールについてある程度まとめられた『入門レベルでは決して足りない実務に必須のスキルとは ExcelVBA 実戦のための技術』という本を見つけることが出来ました。

 

「クラスモジュール」の章の部分だけで40ページ分ぐらい書かれていて、他のExcelVBAの本とは違って「一段高いレベル」の内容だと感じます。クラスモジュールについてはこの章だけではなく、他の章でも書かれている部分があります。

 

そして「ユーザーインターフェース・ユーザーフォーム」の章にP388からP389にかけて自分の求めていた「すべてのコマンドボタンのClickイベントにコードを書くのではなく、クラスモジュールを使って、コードを1箇所で済むように」できるコードがありました。

 

引用した文章や今回の経験から、要は「今後は場合によっては、VBAには搭載されていないオブジェクト(イベントを含む)」をつくれるようにならなければいけない、ということでしょう。

 

まだ一部しか見ていないのですが、ExcelVBAについて基礎を勉強して、もう一段上のレベルの知識が必要となった時に本書は非常に役に立ちそうに思います。

コメント