VBA入門
第138回.外部ライブラリ(ActiveXオブジェクト)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2019-12-21

第138回.外部ライブラリ(ActiveXオブジェクト)


VBAには外部ライブラリ(ActiveXオブジェクト)を操作する事が出来る仕組みがあります。
ActiveXオブジェクトとは、オートメーションをサポートするアプリケーションがオートメーションインターフェイスを通して他のアプリケーションに公開しているオブジェクトです。
これらのアプリケーションは必ず1つ以上の型のオブジェクトがあり、ライブラリとして使用できるようになっています。
VBAでは、このライブラリのオブジェクトを参照することでアプリケーションを操作できます。


ただしVBAから利用するためには、そのパソコンに当該ライブラリが存在していなければなりません。
つまり、そのアプリケーションがインストールされている必要があります。
例えば、Office製品のAccessがインストールされていなければ、AccessのActiveXオブジェクトは利用できません。
したがってマクロVBAの開発環境だけでなく、そのVBA実行環境にも当該アプリケーションがインストールされている必要があります。

マクロVBAでActiveXオブジェクトを扱うには、VBEで参照設定する方法とCreateObject関数を使う方法があります。

事前バインディングと遅延バインディング(実行時バインディング)

事前バインディング

特定のオブジェクト型として宣言された変数に代入される場合、オブジェクトは事前(コンパイル時に)バインディングされます。
事前バインディングされたオブジェクトでは、アプリケーションが実行される前に、
コンパイラによってメモリの割り当てとその他の最適化が実行されます。
ただし、外部オブジェクトの場合は参照設定が必要になります。

遅延バインディング(実行時バインディング)

オブジェクトが Object 型として宣言された変数に代入される場合は、遅延(実行時)にバインディングされます。
この型のオブジェクトは、任意のオブジェクトへの参照を保持できますが、
事前バインディングされたオブジェクトの利点をほとんど持ちません。

実装(VBA記述)の違い

遅延バインディング
CreateObject関数を使用します。
CreateObject関数は、ActiveXオブジェクトへの参照を作成して返します。CreateObject関数を使う事で、参照設定することなくActiveXオブジェクトを使用できるようになります。CreateObject関数の構文 CreateObject(class,[servername]) class 必ず指定します。

Dim objFSO As Object

Set objFSO = CreateObject("Scripting.FileSystemObject")


事前バインディング
「ツール」→「参照設定」で「Microsoft Scripting Runtime」にチェックを付ける。

VBA マクロ ActiveXオブジェクト
※ライブラリ一覧はPC環境により変わります。

Dim objFSO As New FileSystemObject
または、
Dim objFSO As FileSystemObject
Set objFSO = New FileSystemObject


一言で言えば、
変数宣言の型がObjectが遅延バインディング、特定のオブジェクト型が事前バインディング
以下で詳しく解説しています。
事前バインディングと遅延バインディング(実行時バインディング)
VBAでActiveXオブジェクトを操作する場合のVBA記述方法が2通りあります。オブジェクトがオブジェクト変数に代入されるとき、事前バインディングと遅延バインディング(実行時バインディング)の2通りです。バインディングとは バインディングはbindingで、縛るとか束ねると言う意味の英単語です。

参照設定する名前とCreateObject関数の引数文字列が違う為に書き換えに苦労する場合があります。
VBAで良くつかうオブジェクトを以下で一覧してしています。
参照設定、CreateObject、オブジェクト式の一覧
VBAでエクセル外のオブジェクトを使うときには、事前バインディングと遅延バインディング(実行時バインディング)の2通りがあります、この時それぞれ何を指定したらよいのか、指定する文字列が長いので結構探してしまうことが度々あります。そこで、自身の覚え書きとしての意味も含めて、参照設定、CreateObjectのclass、

VBAで良く使われるActiveXオブジェクト

マクロVBAで頻繁に使われるライブラリ(ActiveXオブジェクト)を紹介します。
「参照設定」のダイアログをみて分かる通り、以下はほんの一部です。
VBAで使えるライブラリ(ActiveXオブジェクト)は膨大な数が存在します。

Office製品

Excelを含むOffice製品がオートメーションをサポートするアプリケーションです。

ブックを開かずにセル値を取得(ExecuteExcel4Macro,Excel.Application)
「ブックを開かずにセル値を取得」に関する検索が非常に多いようです。おそらく、ExecuteExcel4Macroに関連しているとか、もしくは、大量のファイルがある為、VBAの処理時間がかかってしまうと言うものでしょう。ExecuteExcel4Macroについての簡単な解説は、「ExecuteExcel4Macroについて」サンプルを通して、

Excelの表をPowerPointへ図として貼り付け
PowerPointを作っていると、エクセルの表を挿入したいことが多いです、単発作業なら手作業で十分ですが、定期的にやる場合や、数が多いと大変ですので、マクロで自動化したくなります。上記は、まずは最低限のコードです。セル範囲をコピーして、拡張メタファイルとして貼り付けています。

VBAでのOutlook自動操作
エクセルでメールの送受信する方法はいくつかありますが、なかなか面倒ですし、サポートされない機能(CDOは送信のみ)があったりと、不便な事が多いです。そこで、Excelを使っていると言う事は、大抵はOutlookもインストールされているはずですので、これを使って、メールの送受信を行うという選択をすることは自然な流れです。

インターネット情報の取得

インターネットの情報を取得する方法は何通りもあります。
InternetExplorer
MSHTML
MSXML2

Selenium

それぞれ以下で解説しています。

WEBデータの取得方法
WEBページのデータを取得して、エクセルのデータとして取り込みたいとの要望が多いようです。マクロVBAでWEBページのデータを取得する方法はいろいろあります。QueryTables InternetExplorer MSHTML MSXML2 順番に、以下で説明します。

VBAでのInternetExplorer自動操作
VBAでInternetExplorerを操作したくなることがあります。Webのデータを取得したり、リンクをクリックしたりと、これらを自動で行う事が出来ます。使うのは、InternetExplorer というオブジェクトです。

VBAのスクレイピングを簡単楽にしてくれるSelenium
VBAでWebスクレイピングする方法としてIE自動操作がありますが、VBA記述が結構面倒になります、もっと簡単にスマートにVBAを書きたいと思ったら…SeleniumBasicを使ってみましょう。SeleniumBasicは、エクセルVBAでのWeb閲覧を自動化することを強力かつ簡単に実現してくれます。

メール送受信

メールの送受信する代表的な方法として、OutLookを操作する方法以外にCDOを使う方法があります。

VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)
VBAでメール送信する方法はいろいろありますが、ここでは、CDO(MicrosoftCollaborationDataObjects)を使っての送信方法を解説します。メール送信は、メーラーを使う方法や、フリーのDLLを使う方法等もありますが、まずは、Windowsに標準であるCDOを使ってみましょう。

ファイルシステムオブジェクト(FileSystemObject)

マクロVBA入門で既に解説していますが、コンピュータのファイル システムへのアクセスが提供されています。

第119回.ファイルシステムオブジェクト(FileSystemObject)
FileSystemObjectオブジェクトでは、コンピュータのファイルシステムへのアクセスが提供されています。VBAに用意されているファイル操作関連のステートメントや関数より、より強力で、より多くの機能が搭載されています。ただし、機能が大変多いため、これらを全て覚えるという事は困難です。

Dictionary(ディクショナリー)

データをキーとアイテム(データ)のセットで格納する辞書オブジェクトで、連想配列とも呼ばれます。

Dictionary(ディクショナリー)連想配列の使い方について
エクセル掲示板で、Dictionaryオブジェクトについて簡単な使用例を上げて解説して欲しいです。検討お願いしますm(_ _)m と頂いたので、分かる範囲内で解説します。実際は、私はあまり使う事はありません。

Dictionary(ディクショナリー)のパフォーマンスについて
Dictionary(ディクショナリー)は辞書機能です、この辞書は、重複は許されず、キーとデータの2つが存在します、今回はこのDictionaryのパフォーマンス(処理速度を)を検証します。Dictionaryの基本的な使い方については、Dictionary(ディクショナリー)連想配列の使い方について こちらを参照してください。

正規表現(RegExp)

正規表現は複雑なパターンマッチングとテキストの検索置換するためのツールです。

VBAで正規表現を利用する(RegExp)
正規表現は複雑なパターンマッチングとテキストの検索置換するためのツールです、マクロVBAで正規表現を使う場合はRegExpオブジェクトを使用します、RegExpは、VBScriptに正規表現として用意されているオブジェクトです。メタ文字 メタ文字の一覧です。

WshShell (Wscript.Shell)

Windowsシェルへのアクセスが提供されています。

特殊フォルダの取得(WScript.Shell,SpecialFolders)
デスクトップのフォルダ、スタートメニューのフォルダ、個人用ドキュメントのフォルダなど、Windowsの特殊フォルダを取得するには、ネイティブのWindowsシェルへのアクセスを提供するWScript.ShellのSpecialFoldersプロパティを使用します。CreateObject関数で作成したWscript.ShellのSpecialFolder…

Shell.Application

Shell32ライブラリで定義されている、Shellクラスを利用します。

VBAでファイルを既定のアプリで開く方法
Excelマクロで、エクセル以外のファイルを既定のアプリケーションで開く場合の方法について何通りか解説します、VBAでファイルを単純に開くだけの場合についてになります。ファイルを開いた後に、そのファイルに対して何らかの操作をしたい場合は、対応するアプリケーション毎に個別の対応が必要になりますが、Windowsで開けるファイルであり、

ADO(ActiveX Data Objects)

ADOはMicrosoftが提供するデータベースアクセスのためのソフトウェア部品です。
OLE DBをActiveXコントロールの形で使えるようにしたプログラミングインターフェースになります。

ADO(ActiveX Data Objects)の使い方の要点
ADOはMicrosoftが提供するデータベースアクセスのためのソフトウェア部品です。OLEDBをActiveXコントロールの形で使えるようにしたプログラミングインターフェースになります。ここでは、ADOを使用したデータベースへの接続方法を解説します。

ADOでマスタ付加と集計(SQL)
VBAでADOを使用し、マスターデータよりデータ付加します。ADOではSQL文が必要になりますが、ここではSQL文の詳細については説明を料略します。自身の他シートから、マスタ情報を付加し、さらに、集計をします。

ADOでマスタ更新(SQL)
VBAでADOを使用し、マスターデータを更新します。ADOではSQL文が必要になりますが、ここではSQL文の詳細については説明を料略します。自身のブックの、他シートを更新します。シート「顧客マスタ」の、A列が顧客番号、B列が顧客名で、1行目が見出しになっているものとします。

ADOでCSV読み込み(SQL)
VBAでADOを使用し、CSVデータを読み込みます。ADOではSQL文が必要になりますが、ここではSQL文の詳細については説明を省略します。ADO以外の方法については、「CSVの読み込み方法」を参考にして下さい。

ADO(ActiveX Data Objects)の使い方の要点
ADOはMicrosoftが提供するデータベースアクセスのためのソフトウェア部品です。OLEDBをActiveXコントロールの形で使えるようにしたプログラミングインターフェースになります。ここでは、ADOを使用したデータベースへの接続方法を解説します。

SQL入門:VBAからデータベースを使う
社会的にパソコンで扱うデータ量は近年急激に増えています。これに呼応してエクセルも2003までは65536行まででしたが、2007から飛躍的に増えて1048576行となっています。しかしエクセルで100万行扱えるといっても、データ量としては列数もありますので、実際には100万行はおろか数十万行でもエクセルが重くなって扱いづらくなってしまいます。

ActiveXオブジェクトの最後に

既に書いた通り、マクロVBAから利用できるActiveXオブジェクトは膨大にあります。
とはいえ頻繁に使うものは、ここで紹介したものが主になるでしょう。
紹介したもの以外については、個別に書籍やWEBで調べながら使用してください。
ただし、ライブラリによっては情報が極めて少ないものもありますので、この点はご注意ください。

先にも書いた通り、VBA開発環境だけでなくVBAを実行するPCにもそのアプリケーションがインストールされている必要がありますので、事前に必ず確認してからVBA開発するようにしてください。



同じテーマ「マクロVBA入門」の記事

第123回.APIについて(Win32API)
第124回.Workbookのイベントプロシージャー
第125回.Worksheetのイベントプロシージャー
第130回.テーブル操作の概要(ListObject)
第131回.テーブル操作のVBAコード(ListObject)
第127回.他のブックのマクロを実行(Runメソッド)
第128回.マクロをショートカットで起動(OnKeyメソッド)
第129回.レジストリの操作(SaveSetting,GetSetting,GetAllSettings,DeleteSetting)
第133回.引数の数を可変にできるパラメーター配列(ParamArray)
第134回.Errオブジェクトとユーザー定義エラー
第138回.外部ライブラリ(ActiveXオブジェクト)


新着記事NEW ・・・新着記事一覧を見る

ツイッターで出されたVBAのお題をやってみた|エクセル雑感(1月13日)
イベントプロシージャーの共通化(Enter,Exit)|ユーザーフォーム入門(1月13日)
Rangeオブジェクトの論理演算(差集合と排他的論理和)|VBA技術解説(1月10日)
イベントプロシージャーの共通化|ユーザーフォーム入門(1月7日)
コントロールの動的作成|ユーザーフォーム入門(1月6日)
Evaluateメソッド(文字列の数式を実行します)|VBA技術解説(1月5日)
エクスポート(PDF/XPS)|VBA入門(1月2日)
分析関数(OVER句,WINDOW句)|SQL入門(12月25日)
取得行数を限定するLIMIT句|SQL入門(12月21日)
外部ライブラリ(ActiveXオブジェクト)|VBA入門(12月21日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ