外部ライブラリ(ActiveXオブジェクト)最終更新日:2019-12-21第138回.外部ライブラリ(ActiveXオブジェクト)VBAには外部ライブラリ(ActiveXオブジェクト)を操作する事が出来る仕組みがあります。ActiveXオブジェクトとは、オートメーションをサポートするアプリケーションがオートメーションインターフェイスを通して他のアプリケーションに公開しているオブジェクトです。これらのアプリケーションは必ず1つ以上の型のオブジェクトがあり、ライブラリとして使用できるようになっています。VBAでは、このライブラリのオブジェクトを参照することでアプリケーションを操作できます。VBAから利用するためには、そのパソコンに当該ライブラリが存在していなければなりません。そのアプリケーションがインストールされている必要があります。Office製品のAccessがインストールされていなければ、AccessのActiveXオブジェクトは利用できません。したがってマクロVBAの開発環境だけでなく、そのVBA実行環境にも当該アプリケーションがインストールされている必要があります。マクロVBAでActiveXオブジェクトを扱うには、VBEで参照設定する方法とCreateObject関数を使う方法があります。事前バインディングと遅延バインディング(実行時バインディング)事前バインディング特定のオブジェクト型として宣言された変数に代入される場合、オブジェクトは事前(コンパイル時に)バインディングされます。事前バインディングされたオブジェクトでは、アプリケーションが実行される前に、コンパイラによってメモリの割り当てとその他の最適化が実行されます。外部オブジェクトの場合は参照設定が必要になります。型として宣言された変数に代入される場合は、遅延(実行時)にバインディングされます。事前バインディングされたオブジェクトの利点をほとんど持ちません。実装(VBA記述)の違い遅延バインディングCreateObject関数を使用します。CreateObject関数は、ActiveXオブジェクトへの参照を作成して返します。CreateObject関数を使う事で、参照設定することなくActiveXオブジェクトを使用できるようになります。Runtime」にチェックを付ける。※ライブラリ一覧はPC環境により変わります。変数宣言の型が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もインストールされているはずですので、これを使って、メールの送受信を行うという選択をすることは自然な流れです。インターネット情報の取得インターネットの情報を取得する方法は何通りもあります。InternetExplorerMSHTMLMSXML2Seleniumそれぞれ以下で解説しています。WEBデータの取得方法WEBページのデータを取得して、エクセルのデータとして取り込みたいとの要望が多いようです。マクロVBAでWEBページのデータを取得する方法はいろいろあります。順番に、以下で説明します。VBAでのInternetExplorer自動操作VBAでInternetExplorerを操作したくなることがあります。Webのデータを取得したり、リンクをクリックしたりと、これらを自動で行う事が出来ます。いうオブジェクトです。VBAのスクレイピングを簡単楽にしてくれるSeleniumVBAでWebスクレイピングする方法としてIE自動操作がありますが、VBA記述が結構面倒になります、もっと簡単にスマートにVBAを書きたいと思ったら...SeleniumBasicを使ってみましょう。SeleniumBasicは、エクセルVBAでのWeb閲覧を自動化することを強力かつ簡単に実現してくれます。メール送受信メールの送受信する代表的な方法として、OutLookを操作する方法以外にCDOを使う方法があります。Objects)VBAでメール送信する方法はいろいろありますが、ここでは、CDO(MicrosoftCollaborationDataObjects)を使っての送信方法を解説します。メール送信は、メーラーを使う方法や、フリーのDLLを使う方法等もありますが、まずは、Windowsに標準であるCDOを使ってみましょう。システムへのアクセスが提供されています。第119回.ファイルシステムオブジェクト(FileSystemObject)FileSystemObjectオブジェクトでは、コンピュータのファイルシステムへのアクセスが提供されています。VBAに用意されているファイル操作関連のステートメントや関数より、より強力で、より多くの機能が搭載されています。機能が大変多いため、これらを全て覚えるという事は困難です。Dictionary(ディクショナリー)データをキーとアイテム(データ)のセットで格納する辞書オブジェクトで、連想配列とも呼ばれます。Dictionary(ディクショナリー)連想配列の使い方についてエクセル掲示板で、Dictionaryオブジェクトについて簡単な使用例を上げて解説して欲しいです。頂いたので、分かる範囲内で解説します。実際は、私はあまり使う事はありません。Dictionary(ディクショナリー)のパフォーマンスについてDictionary(ディクショナリー)は辞書機能です、この辞書は、重複は許されず、キーとデータの2つが存在します、今回はこのDictionaryのパフォーマンス(処理速度を)を検証します。こちらを参照してください。正規表現(RegExp)正規表現は複雑なパターンマッチングとテキストの検索置換するためのツールです。VBAで正規表現を利用する(RegExp)正規表現は複雑なパターンマッチングとテキストの検索置換するためのツールです、マクロVBAで正規表現を使う場合はRegExpオブジェクトを使用します、RegExpは、VBScriptに正規表現として用意されているオブジェクトです。(Wscript.Shell)Windowsシェルへのアクセスが提供されています。特殊フォルダの取得(WScript.Shell,SpecialFolders)デスクトップのフォルダ、スタートメニューのフォルダ、個人用ドキュメントのフォルダなど、Windowsの特殊フォルダを取得するには、ネイティブのWindowsシェルへのアクセスを提供するWScript.ShellのSpecialFoldersプロパティを使用します。CreateObject関数で作成したWscript.ShellのSpecialFolder...Shell.ApplicationShell32ライブラリで定義されている、Shellクラスを利用します。VBAでファイルを既定のアプリで開く方法Excelマクロで、エクセル以外のファイルを既定のアプリケーションで開く場合の方法について何通りか解説します、VBAでファイルを単純に開くだけの場合についてになります。Objects)ADOはMicrosoftが提供するデータベースアクセスのためのソフトウェア部品です。DBをActiveXコントロールの形で使えるようにしたプログラミングインターフェースになります。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の読み込み方法」を参考にして下さい。Objects)の使い方の要点ADOはMicrosoftが提供するデータベースアクセスのためのソフトウェア部品です。OLEDBをActiveXコントロールの形で使えるようにしたプログラミングインターフェースになります。ここでは、ADOを使用したデータベースへの接続方法を解説します。SQL入門:VBAからデータベースを使う社会的にパソコンで扱うデータ量は近年急激に増えています。これに呼応してエクセルも2003までは65536行まででしたが、2007から飛躍的に増えて1048576行となっています。エクセルで100万行扱えるといっても、データ量としては列数もありますので、実際には100万行はおろか数十万行でもエクセルが重くなって扱いづらくなってしまいます。ActiveXオブジェクトの最後に既に書いた通り、マクロVBAから利用できるActiveXオブジェクトは膨大にあります。いえ頻繁に使うものは、ここで紹介したものが主になるでしょう。紹介したもの以外については、個別に書籍やWEBで調べながら使用してください。ライブラリによっては情報が極めて少ないものもありますので、この点はご注意ください。先にも書いた通り、VBA開発環境だけでなくVBAを実行するPCにもそのアプリケーションがインストールされている必要がありますので、事前に必ず確認してからVBA開発するようにしてください。外部ライブラリ(ActiveXオブジェクト)このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。外部ライブラリこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。