プログラミング言語というものに対して多くの人はどんなイメージを持っているでしょうか?プログラミング言語には様々な種類がありますが、その中のひとつに「VBA」というものがあります。
VBAといえばエクセル、エクセルといえばVBAというイメージが以前の自分にはありました。
VBAとは、Visual Basic for Applications の略です。その意味は特定のアプリケーションに特化したプログラミング言語のことであり、Visual Basicをベースとしています。
私達が仕事で日常的に使っているExcelなどのMicrosoft Officeのアプリケーションに入っています。
このブログでは、数ヶ月前からとあるきっかけからVBAについて勉強を始めて、その内容や効果についていろいろと書いてきました。
勉強したからこそわかるようになったのですが、VBAが使える範囲って、エクセル「だけではない」んですね。
VBAを始める前の自分のイメージでは、VBAというのはエクセルだけにしか使えないものだと思っていました。また「Visual Basic for Applications 」とあるように特定のアプリケーションに特化したプログラミング言語なわけですからそういうものなのだろうとずっと思っていました。えぇ、つい最近までは。
このVBAを使ったプログラムやシステムが影響を与えられる範囲というのは、エクセルだけではなくて実はいろいろ使えるんだということを知るようになりました。
ですから、ちょっとした感動、おもしろさ、好奇心が出てくるようになってきたわけで、今回はそのことについて自分が思ったことを書いていってみます。
VBAはワード、パワーポイント、アクセスでも使える
「ワード、パワーポイント、アクセスでVBAが使える」と言われて驚く人はいないでしょうか?
「そんなことはもう知っている」という人もいるでしょうし、「VBAが使えるのってエクセルだけじゃないの?」という人もいるでしょう。最近まで自分は後者でした。
たぶんVBAについて勉強する機会がなかったら、一生知らなかったかもしれません。そもそも使うきっかけとかないですからね。実際に調べてみたら確認できました。
自分が持っているパソコンの中に入っているMicrosoft Officeのワード2013だと、開いた画面上のリボンにはVBAが確認できるタブはありませんでした。
けれども、リボン上で右クリックして表示される画面で「開発」の所にチェックを入れることで開発タブが表示されるようになります。その中に「Visual Basic」を確認できました。あぁ、エクセル以外でも本当に使えるんですね。
他にアクセスでも確認できました。アクセス2013を開くと「作成」タブがあって、その中に「Visual Basic」があります。
パワーポイントでも確認できました。自分のパソコンで使えるのはパワーポイント2013ですが、ここではワードと同様に開発タブがなかったので、同じ方法でリボンに開発タブを表示させます。
その開発タブを開いてみると、ありました。「Visual Basic」の文字が。MicrosoftOfficeで代表的なのが、エクセル、ワード、アクセス、パワーポイントですが、実はそれ以外にも使えるアプリケーションがあります。
全部を確認したわけではありませんが、パブリッシャー(Publisher)というものも見てみました。Microsoftから出されているOfficeソフトのひとつで簡易DTPソフトになります。
これも初期設定では開発タブはないのですが、ワードと同様の方法による開発タブを表示できるようにすると、「Visual Basic」を確認できます。あるんですねぇ。
Microsoft Officeに関するソフトを全て確認できるわけではないのですが、もしかしたら全ての製品でVBAが使えるのかもしれないですね。どんな仕事にも定型的な部分とか繰り返し作業ってあったりしますからね。
そのような手間がかかったり、面倒くさく、ミスが許されない部分はVBAでマクロがつくれれば非常に楽になります。また、Microsoft OfficeのものであればVBAを使うことで異なるアプリケーション間でもやりとりができるようです。
例えばVBAを利用してエクセルでつくった表をワードの文書内に埋め込むなどです。この機能ってすごくないですか?最初知ったときは非常に驚きました。
まずエクセル以外にもVBAが使えるということに驚いたことはもちろん、MicrosoftOfficeのものであれば異なるアプリケーション間でVBAでやりとりができるということに。
この機能を知っているか知らないかで、仕事の幅が全然違ってくるんじゃないでしょうか。ちなみにもっとすごいことが次の項目で書いてあります。
VBAはIE(インターネット・エクスプローラー)でも使える
VBAを勉強していると「OLEオートメーション」なんて言葉を目にしたりします。なんだかかっこよさそうな名前ですね。どのような機能なのでしょうか。
『VBAエキスパート公式テキスト Excel VBA スタンダード』には次のように書かれています。
p.182
OLEはObject Linking and Embeddingの略称で、アプリケーションから別のアプリケーションを操作したり、Wordの文書内にExcelの表を埋め込むなど、オブジェクトをやり取りするための規格です。
OLEオートメーションは、Excel VBAだけではなく、Visual BasicやVisual C#など一般的なプログラミング言語から使用できる共通の規格です。
エクセルで使えるプログラミング言語なんだけど、VBAじゃない、みたいなイメージでしょうか。
厳密に言えば、VBAはエクセルやワードなどのMicrosoft Officeのアプリケーション内でしか使えないようです。ですが、エクセルでもVBA以外でもMicrosoftが開発したVisual Basicなどであれば、特定のアプリケーションだけでなく別のアプリケーションでも使える、
そういった仕組みが「OLEオートメーション」である、ということでしょう。
本書においては、このOLEオートメーションを利用することでIE(インターネットエクスプローラー)も使える、とあります。最初このことを知ったときは、「え?インターネットも何か操作できちゃうの!?」と驚きました。
ちなみにIE(インターネットエクスプローラー)とは、Microsoftが開発したウェブブラウザです。ウェブブラウザとはウェブページを画面上に表示するシステムのことですが、これにはIE以外にもグーグルが開発したChromeやMozilla CorporationのFirefoxなどが有名です。
インターネットで例えば天気に関するウェブページを見たい場合は、このブラウザというものが必要になってきます。これを操作できるのがOLEオートメーションです。
例えば特定のページを表示するとか、特定のページから文字列を抽出、操作によっては指定のページの内容も書き換えることができるようです。
これってかなりすごいことじゃないですか?例えば経理の仕事であれば、毎日の為替のレートの収集に使えそうだなと思いました。
世界の通過には円だけではなくドルやユーロ、元、香港ドル、オーストラリアドル等々たくさんの種類の通貨があります。会社によっては特定の日のレートだけではなく、ある一定期間のレートの平均を使ったりする所もあります。
こういった時に、特定のページから為替のレートを抽出する仕組みをつくれば、仕事がかなり楽になりそうです。仕組みさえ出来ればボタン一つでその日のレートがエクセルのシートに抽出されるわけですから。
また、銀行からの入出金データをダウンロードするときなんかにも使えそうですね。今の時代はインターネットバンキングなんて言葉もあって、インターネット上から銀行の入出金データをダウンロードできます。
そのダウンロードしたデータを自社の会計ソフトに読み込ませるわけですが、これが結構面倒くさいのです。会社が取引する銀行というのは基本的に1社だけでないですから。みずほ銀行とか三菱東京UFJとか三井住友とか他にもいろいろ銀行はあります。
例えば自社が10の銀行と取引していたとして、毎日10行の入手金データを確認してダウンロードしなければならないとします。この作業が結構時間がかかって面倒くさい。しかしOLEオートメーションを有効に使えればこの作業も一瞬で終わらせられるんじゃないかと思いました。
OLEオートメーションはここまで書いたこと以外にもたくさんのメリットがありますが、次のような注意点もあります。
『VBAエキスパート公式テキスト Excel VBA スタンダード』
p.186
OLEオートメーションを使うと、Excel以外のアプリケーションをVBAから操作できます。しかし、それはセルを操作するほど簡単なことではありません。たとえば、参照設定で登録するオブジェクト名や、CreateObject関数の引数に指定するクラス名は、VBAのヘルプには載っていません。
OLEオートメーションで操作するオブジェクトのクラス名が何なのかは、何らかの方法で調べなければなりません。
(中略)
VBAのヘルプや解説書には載っていませんし、マクロ記録でも記録されません。では、どうやって必要なプロパティやメソッドを知ればいいのでしょう。それにはInternet Explorerのオブジェクト構造やプロパティ、メソッドなど学習するしか方法はありません。
うーん。要は自力で手探りで勉強していくしか方法はないということでしょうか。
自分が確認した範囲では、確かにOLEオートメーションに関する書籍はVBAやエクセルよりかは少ないです。
VBAに関する本であれば、「○○というメソッドは・・・」とか「△△というオブジェクトは・・・」みたいに丁寧に書かれているものもありますが、OLEオートメーションに関する本は実戦形式のものが多い気がします。
以上のことをまとめると、厳密にはVBAでエクセル以外のアプリケーションやシステムを操作できるわけでないんだけど、エクセルを通して使えるVBA以外のMicrosoft社製の他のプログラミング言語とOLEオートメーションを利用すると、エクセル以外のシステムも操作できるということです。
VBAはSendkeysメソッドを使ってPDFや他のアプリケーションなどMicrosoft Office系列以外にも使える
ここまで書いてきたように、VBAというのはエクセル以外にもMicrosoftが開発したアプリケーションなら使えることがわかりました。ここまでなら何となくは理解できます。
「あぁ、Microsoftという同じ会社がつくったんだから内部構造も共通化させて使えるようにはできそうだよね」と。
でもMicrosoft以外のアプリケーションならどうでしょうか?VBAが使える範囲ってMicrosoftがつくったものだけにしか使えないのでしょうか。
いいえ、そうでもないようです。その証拠に以下のような過去記事も書いてきました。
- SendKeysメソッドとFolderfilelistでPDFを自動印刷できないか
- CONCAT関数と検索ボックスを利用してPDFを一括印刷するVBAとマクロ
- PDFの自動印刷のためにAPIのkernel32を利用してみた
引用した過去記事はSendKeysメソッドというコードを使うと、キーボードの通常のキー操作やショートカットキーなどを利用してアドビシステムズが開発したPDFを操作したといった内容です。
つまり、やり方によってはMicrosoftが開発したシステム以外にも、VBAで何らかの形で影響を及ぼせるということです。このことを知ったときは、
「あれ?もしかしてVBAって結構使える範囲が広いんじゃないか?」と思いました。
プログラミング言語には有名どころではC言語やJavaなどがあります。こういったプログラミング言語であればVBAに比べればかなり汎用性は高いのではないかと容易にイメージできます。
とはいうものの、C言語やJava程ではないにしてもPDFを操作できた事例があるのだから、やり方によってはMicrosoftが開発したアプリケーション以外でももっと広い範囲でVBAが使えるのではないか、と誰でもイメージがつくはずです。
では、具体的にどこまでの範囲でVBAが使えるのでしょうか?申し訳ないですが、さすがにどこまでかは今の自分ではわかりません。
ただ、当初勉強を始めた時よりはVBAというものに対して「思っていたよりも非常に可能性が広そうだ」と考えられるようになりましたし、
VBAを勉強することで、プログラミング言語によってつくれるシステムの範囲や影響を与えられる範囲というものが存在するんだ、ということが段々とわかってきました。
なるほど、何事も勉強してみるものです。
まとめ
ここまでVBAが使える範囲についていろいろと書いてきました。すごいですよね。エクセル以外で使えることに驚いたのはもちろん、Microsoft Officeに関するソフトであればほとんどがVBAが使えます。
さらにインターネットエクスプローラーでも使えるということは、マクロでインターネット上からの情報も自動的に取得したり、手を加えられるわけです。
さらにこれらを連携させる中でVBAを利用できます。エクセル→ワードとかエクセル→パワーポイントとか、ワード→エクセルとかです。
ここまではまだ予想はできそうです。「Microsoftが開発したのだから同じOffice製品なんだから内部構造も共通化できるだろう」みたいな感じで。
でも、Microsoft製品以外にも何らかの形で影響を与えられるとは全く考えていませんでした。そのことについてはここまで書いてきた中で過去記事で触れました。
特定のコード(SendKeysメソッドとか)や仕組みを利用することで、MicrosoftOffice製品以外のアプリケーションも操作できるということです。他の人はどう感じるかはわかりませんが、自分にとっては非常にすごいことです。
というのも、これだけ使える範囲が広ければ、業務を自動化できる範囲もそれだけ広がるからです。
以前は限定的だと考えていたことも、アイデアによっては非常にたくさんの動作をさせることができるのではないか、と考えられることはもちろん、今までとは全く違ったやり方の仕事ができるようになるのではないでしょうか。





















コメント