<img class="alignnone wp-image-2675" src="https://www.chishikinosoukonoseiri.com/wp-content/uploads/2018/02/diagram-155894_640-300x216.png" alt="" width="578" height="416" />

VBAというものに対して多くの人はどんなイメージを持っているでしょうか？

VBAというとエクセル、エクセルといえばVBAというイメージが以前の自分には

ありました。

&nbsp;

VBAとは、Visual Basic for Applications の略です。その意味は特定のアプリケー

ションに特化したプログラミング言語のことであり、Visual Basicをベースとして

います。

&nbsp;

私達が仕事で日常的に使っているExcelなどのMicrosoft Officeのアプリケーション

に入っています。

&nbsp;

このブログでは、数ヶ月前からとあるきっかけからVBAについて勉強を始めて、そ

の内容や効果についていろいろと書いてきました。

&nbsp;

勉強したからこそわかるようになったのですが、VBAが使える範囲って、エクセル

「だけではない」んですね。

&nbsp;

VBAを始める前の自分のイメージでは、VBAというのはエクセルだけにしか使えな

いものだと思っていました。また「Visual Basic for Applications 」とあるように

特定のアプリケーションに特化したプログラミング言語なわけですからそういうも

のなのだろうとずっと思っていました。えぇ、つい最近までは。

&nbsp;

このVBAを使ったプログラムやシステムが影響を与えられる範囲というのは、エク

セルだけではなくて実はいろいろ使えるんだということを知るようになりました。

&nbsp;

ですから、ちょっとした感動、おもしろさ、好奇心が出てくるようになってきたわ

けで、今回はそのことについて自分が思ったことを書いていってみます。

&nbsp;
<h2>VBAはワード、パワーポイント、アクセスでも使える</h2>
ワード、パワーポイント、アクセスでVBAが使えるというのは何となくイメージが

つくかと思います。
<h2>VBAはIE(インターネット・エクスプローラー)でも使える</h2>
VBAを勉強していると「OLEオートメーション」なんて言葉を目にしたりします。

なんだかかっこよさそうな名前ですね。どのような機能なのでしょうか。

&nbsp;

『VBAエキスパート公式テキスト Excel VBA スタンダード』には次のように書か

れています。

&nbsp;
<blockquote>p.182

OLEはObject Linking and Embeddingの略称で、アプリケーションから別の

アプリケーションを操作したり、Wordの文書内にExcelの表を埋め込むなど、

オブジェクトをやり取りするための規格です。

&nbsp;

OLEオートメーションは、Excel VBAだけではなく、Visual BasicやVisual C#

など一般的なプログラミング言語から使用できる共通の規格です。</blockquote>
&nbsp;

エクセルで使えるプログラミング言語なんだけど、VBAじゃない、みたいなイメ

ージでしょうか。

&nbsp;

厳密に言えば、VBAはエクセルやワードなどのMicrosoft Officeのアプリケーショ

ン内でしか使えないようです。ですが、エクセルでもVBA以外でもMicrosoftが開

発したVisual Basicなどであれば、特定のアプリケーションだけでなく別のアプリ

ケーションでも使える、

&nbsp;

そういった仕組みが「OLEオートメーション」である、ということでしょう。

&nbsp;

本書においては、このOLEオートメーションを利用することでIE（インターネッ

トエクスプローラー）も使える、とあります。最初このことを知ったときは、

「え？インターネットも何か操作できちゃうの！？」と驚きました。

&nbsp;

ちなみにIE（インターネットエクスプローラー）とは、Microsoftが開発したウェ

ブブラウザです。ウェブブラウザとはウェブページを画面上に表示するシステム

のことですが、これにはIE以外にもグーグルが開発したChromeやMozilla Corporation

のFirefoxなどが有名です。

&nbsp;

インターネットで例えば天気に関するウェブページを見たい場合は、このブラウ

ザというものが必要になってきます。これを操作できるのがOLEオートメーション

です。

&nbsp;

例えば特定のページを表示するとか、特定のページから文字列を抽出、操作によっ

ては指定のページの内容も書き換えることができるようです。

&nbsp;

これってかなりすごいことじゃないですか？例えば経理の仕事であれば、毎日の為

替のレートの収集に使えそうだなと思いました。

&nbsp;

世界の通過には円だけではなくドルやユーロ、元、香港ドル、オーストラリアドル

等々たくさんの種類の通貨があります。会社によっては特定の日のレートだけでは

なく、ある一定期間のレートの平均を使ったりする所もあります。

&nbsp;

こういった時に、特定のページから為替のレートを抽出する仕組みをつくれば、仕

事がかなり楽になりそうです。仕組みさえ出来ればボタン一つでその日のレートが

エクセルのシートに抽出されるわけですから。

&nbsp;

また、銀行からの入出金データをダウンロードするときなんかにも使えそうですね。

今の時代はインターネットバンキングなんて言葉もあって、インターネット上から

銀行の入出金データをダウンロードできます。

&nbsp;

そのダウンロードしたデータを自社の会計ソフトに読み込ませるわけですが、これ

が結構面倒くさいのです。会社が取引する銀行というのは基本的に1社だけでないで

すから。みずほ銀行とか三菱東京UFJとか三井住友とか他にもいろいろ銀行はありま

す。

&nbsp;

例えば自社が10の銀行と取引していたとして、毎日10行の入手金データを確認して

ダウンロードしなければならないとします。この作業が結構時間がかかって面倒くさ

い。しかしOLEオートメーションを有効に使えればこの作業も一瞬で終わらせられる

んじゃないかと思いました。

&nbsp;

OLEオートメーションはここまで書いたこと以外にもたくさんのメリットがあります

が、次のような注意点もあります。

&nbsp;
<blockquote>『VBAエキスパート公式テキスト Excel VBA スタンダード』

p.186

OLEオートメーションを使うと、Excel以外のアプリケーションをVBAから操作

できます。しかし、それはセルを操作するほど簡単なことではありません。た

とえば、参照設定で登録するオブジェクト名や、CreateObject関数の引数に指

定するクラス名は、VBAのヘルプには載っていません。

&nbsp;

OLEオートメーションで操作するオブジェクトのクラス名が何なのかは、何ら

かの方法で調べなければなりません。

（中略）

VBAのヘルプにや解説書には載っていませんし、マクロ記録でも記録されませ

ん。では、どうやって必要なプロパティやメソッドを知ればいいのでしょう。

それにはInternet Explorerのオブジェクト構造やプロパティ、メソッドなど学

習するしか方法はありません。</blockquote>
うーん。要は自力で手探りで勉強していくしか方法はないということでしょうか。

&nbsp;

自分が確認した範囲では、確かにOLEオートメーションに関する書籍はVBAやエクセ

ルよりかは少ないです。

&nbsp;

VBAに関する本であれば、「○○というメソッドは・・・」とか「△△というオブジ

ェクトは・・・」みたいに丁寧に書かれているものもありますが、OLEオートメーショ

ンに関する本は実戦形式がのものが多い気がします。

&nbsp;

以上のことをまとめると、厳密にはVBAでエクセル以外のアプリケーションやシステム

を操作できるわけでないんだけど、エクセルを通して使えるVBA以外のMicrosoft社製の

他のプログラミング言語を使うと、エクセル以外のシステムも操作できるということです。

&nbsp;
<h2>VBAはSendkeysメソッドを使ってPDFや他のアプリケーションなどMicrosoft Office系列以外にも使える</h2>
ここまで書いてきたように、VBAというのはエクセル以外にもMicrosoftが開発した

アプリケーションなら使えることがわかりました。ここまでなら何となくは理解でき

ます。

&nbsp;

「あぁ、Microsoftという同じ会社がつくったんだから内部構造も共通化させて使え

るようにはできそうだよね」と。

&nbsp;

でもMicrosoft以外のアプリケーションならどうでしょうか？VBAが使える範囲って

Microsoftがつくったものだけにしか使えないのでしょうか。

&nbsp;

いいえ、そうでもないようです。その証拠に以下のような過去記事も書いてきました。
<ul>
 	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2018/01/20/0951">SendKeysメソッドとFolderfilelistでPDFを自動印刷できないか</a></strong></li>
 	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2018/01/27/0424">CONCAT関数と検索ボックスを利用してPDFを一括印刷するVBAとマクロ</a></strong></li>
 	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2018/01/28/0742">PDFの自動印刷のためにAPIのkernel32を利用してみた</a></strong></li>
</ul>
引用した過去記事はSendKeysメソッドというコードを使うと、キーボードの通常の

キー操作やショートカットキーなどを利用してアドビシステムズが開発したPDFを操

作したといった内容です。

&nbsp;

つまり、やり方によってはMicrosoftが開発したシステム以外にも、VBAで何らかの

形で影響を及ぼせるということです。このことを知ったときは、

&nbsp;

「あれ？もしかしてVBAって結構使える範囲が広いんじゃないか？」と思いました。

&nbsp;

プログラミング言語には有名どころではC言語やJavaなどがあります。こういったプ

ログラミング言語であればVBAに比べればかなり汎用性は高いのではないかと思いま

す。

&nbsp;

VBAを勉強することで、プログラミング言語によってつくれるシステムの範囲や影響

を与えられる範囲というものが存在するんだ、ということが段々とわかってきました。

&nbsp;

なるほど、何事も勉強してみるものですね。

&nbsp;
<h2>まとめ</h2>
&nbsp;

&nbsp;

&nbsp;

&nbsp;
<h2>あわせて読みたい</h2>
<ul>
 	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2017/12/31/0830">業務を自動化できる技術を持たないと自動化される時代が来るかもしれない</a></strong></li>
 	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2017/11/17/1248">なぜプログラミング言語の習得が叫ばれるようになってきたのか</a></strong></li>
 	<li><a href="https://www.chishikinosoukonoseiri.com/entry/2017/11/11/0256"><strong>今まで大したことないと思っていた仕事が今は宝の山に見える</strong></a></li>
 	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2017/11/04/2026">RPAツールが一般化されればプログラミング言語の知識は不要になるのか</a></strong></li>
 	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2017/10/07/1206-2">経理でマクロやVBAが使えるとミスが劇的に減って仕事が本当に楽になる</a></strong></li>
</ul>