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について基礎を勉強して、もう一段上のレベルの知識が必要となった時に本書は非常に役に立ちそうに思います。

ExcelVBAを利用して外部アプリケーションを操作する方法やExcel以外のVBAについて

最近はExcelVBAを利用して外部アプリケーションを操作するシステムをつくっていたのですが、正直これがどうにもなりません。

 

というのもExcelVBAは勉強してきましたが、WordVBA、OutlookVBA、PowerPointVBAについてはほとんど勉強してきていないからです。(AccessVBAについてはちょっとだけ勉強してました。)

 

以下の過去記事では、VBAというのはExcelだけではなく他のMicrosoftのofficeソフトでも使えて、それ以外のアプリケーションも操作できるということを知った、といったことを書きました。

 

確かに「Excel以外にもMicrosoftのofficeソフトでVBAを使える」ということは知ってはいましたが、でもまさか自分が使う日がこんなに早く来るとは思っていなかったんです。

 

そのため全然準備ができていません。仕事を通していろいろ取り組んでみてわかったのですが、やはりExceVBAlとは「仕組みが違う」ようです。

 

どうやら各officeソフトのVBAごとに「オブジェクトモデル」というものがあるらしく、これを勉強しなければ理解できないようです。実際インターネットを調べながら試行錯誤してみましたが、理解できていないためかどうにもならない状況です。

 

数年間VBAを使って仕事をしてきた、という人であれば理解できている必要があるかもしれませ。

 

けれども、自分のようなほぼ素人の人間にこのレベルのシステムをつくらせるというのもいささか疑問はありますが、今のような状況になってしまったものは仕方ありません。

 

どちらにしろ遅かれ早かれ勉強する必要はあったので、本とか情報とか整理して、近いうちに本格的に勉強していこうと思います。

Microsoftの各officeソフトごとのオブジェクトモデルについて

先の項目で「ExcelVBA以外のオブジェクトモデルの理解が必要」といったことを書きました。ExcelVBAについてはたくさん書籍がありますが、ExcelVBAやAccessVBA以外だとほとんど市場には出回ってはいないようです。

 

じゃあ他の人はどうやって勉強しているのでしょうか。自分が調べた範囲ではMicroSoftの「ヘルプ」を使って勉強しているようです。例えば以下のようなリンクがあることがわかりました。

ExcelVBAのオブジェクトモデルについて

AccessVBAのオブジェクトモデルについて

WordVBAのオブジェクトモデルについて

PowerPointVBAのオブジェクトモデルについて

OutlookVBAのオブジェクトモデルについて

 

まさか自分がVBAのヘルプを使って勉強しなければならない日が来るとは夢にも思っていませんでした。

 

というのも「勉強」となると、どんな分野でもそれなりの書籍が揃っていると思っていたからです。小さな本屋にはなくても紀ノ国屋のような大きい本屋やアマゾンを利用すれば大抵の書籍は見つかっていました。

 

けれども、この数日で自分が調べた範囲ではPowerPointVBAやOutlookVBAのまともな書籍が見当たりません。あったとしても既に絶版になっているという状況です。

 

今までは大学時代の新聞奨学生をしていた時などに「勉強したくてもできない」といった経験をしたことはありました。しかし勉強したくても「その分野の本がない」という経験はこれが初めてです。

 

もちろん本を使うことだけが勉強ではありませんし、インターネットで調べればある程度の情報は得られます。ただ、欲を言えば「体系化されている本」があったらなぁとは思います。

 

とはいっても、ないものは「ない」ので、今までとは考え方を変えて勉強しなければいけないようです。

あわせて読みたい

こんな記事も読まれています

コメント