<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が使える」と言われて驚く人はいない

でしょうか？

&nbsp;

「そんなことはもう知っている」という人もいるでしょうし、「VBAが使えるのっ

てエクセルだけじゃないの？」という人もいるでしょう。最近まで自分は後者でし

た。

&nbsp;

たぶんVBAについて勉強する機会がなかったら、一生知らなかったかもしれません。

そもそも使うきっかけとかないですからね。実際に調べてみたら確認できました。

&nbsp;

自分が持っているパソコンの中に入っているMicrosoft Officeのワード2013だと、

開いた画面上のリボンにはVBAが確認できるタブはありませんでした。

&nbsp;

けれども、リボン上で右クリックして表示される画面で「開発」の所にチェックを

入れることで開発タブが表示されるようになります。その中に「Visual Basic」を

確認できました。あぁ、エクセル以外でも本当に使えるんですね。

&nbsp;

他にアクセスでも確認できました。アクセス2013を開くと「作成」タブがあって、

その中に「Visual Basic」があります。

&nbsp;

パワーポイントでも確認できました。自分のパソコンで使えるのはパワーポイント

2013ですが、ここではワードと同様に開発タブがなかったので、同じ方法でリボン

に開発タブを表示させます。

&nbsp;

その開発タブを開いてみると、ありました。「Visual Basic」の文字が。Microsoft

Officeで代表的なのが、エクセル、ワード、アクセス、パワーポイントですが、実

はそれ以外にも使えるアプリケーションがあります。

&nbsp;

全部を確認したわけではありませんが、パブリッシャー（Publisher）というものも

見てみました。Microsoftから出されているOfficeソフトのひとつで簡易DTPソフト

になります。

&nbsp;

これも初期設定では開発タブはないのですが、ワードと同様の方法による開発タブ

を表示できるようにすると、「Visual Basic」を確認できます。あるんですねぇ。

&nbsp;

Microsoft Officeに関するソフトを全て確認できるわけではないのですが、もしかし

たら全ての製品でVBAが使えるのかもしれないですね。どんな仕事にも定型的な部分

とか繰り返し作業ってあったりしますからね。

&nbsp;

そのような手間がかかったり、面倒くさく、ミスが許されない部分はVBAでマクロが

つくれれば非常に楽になります。また、Microsoft OfficeのものであればVBAを使うこ

とで異なるアプリケーション間でもやりとりができるようです。

&nbsp;

例えばVBAを利用してエクセルでつくった表をワードの文書内に埋め込むなどです。

この機能ってすごくないですか？最初知ったときは非常に驚きました。

&nbsp;

まずエクセル以外にもVBAが使えるということに驚いたことはもちろん、Microsoft

Officeのものであれば異なるアプリケーション間でVBAでやりとりができるというこ

とに。

&nbsp;

この機能を知っているか知らないかで、仕事の幅が全然違ってくるんじゃないでしょ

うか。ちなみにもっとすごいことが次の項目で書いてあります。

&nbsp;
<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社製の

他のプログラミング言語とOLEオートメーションを利用すると、エクセル以外のシステ

ムも操作できるということです。

&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;

とはいうものの、C言語やJava程ではないにしてもPDFを操作できた事例があるのだ

から、やり方によってはMicrosoftが開発したアプリケーション以外でももっと広い

範囲でVBAが使えるのではないか、と誰でもイメージがつくはずです。

&nbsp;

では、具体的にどこまでの範囲でVBAが使えるのでしょうか？申し訳ないですが、

さすがにどこまでかは今の自分ではわかりません。

&nbsp;

ただ、当初勉強を始めた時よりはVBAというものに対して「思っていたよりも非常に

可能性が広そうだ」と考えられるようになりましたし、

&nbsp;

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

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

&nbsp;

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

&nbsp;
<h2>まとめ</h2>
ここまでVBAが使える範囲についていろいろと書いてきました。すごいですよね。

エクセル以外で使えることに驚いたのはもちろん、Microsoft Officeに関するソフ

トであればほとんどがVBAが使えます。

&nbsp;

さらにインターネットエクスプローラーでも使えるということは、マクロでインタ

ーネット上からの情報も自動的に取得したり、手を加えられるわけです。

&nbsp;

さらにこれらを連携させる中でVBAを利用できます。エクセル→ワードとかエクセ

ル→パワーポイントとか、ワード→エクセルとかです。

&nbsp;

ここまではまだ予想はできそうです。「Microsoftが開発したのだから同じOffice製

品なんだから内部構造も共通化できるだろう」みたいな感じで。

&nbsp;

でも、Microsoft製品以外にも何らかの形で影響を与えられるとは全く考えていませ

んでした。そのことについてはここまで書いてきた中で過去記事で触れました。

&nbsp;

特定のコード（SendKeysメソッドとか）や仕組みを利用することで、Microsoft

Office製品以外のアプリケーションも操作できるということです。他の人はどう感

じるかはわかりませんが、自分にとっては非常にすごいことです。

&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>