カテゴリー名: [ExcelVBAとOLE 基本概念とセル操作]
当シリーズでは、Excelをプログラミングのノウハウで動かすよう試みます。何回かに分けて掲載。
VBA(Visual Basic for Applications)の基本的な記述方法を確認しながら、
OLE(Object Linking and Embedding)という仕組みを利用した場合は、どんなふうに記述したらいいかを見ていきます。
OLEは、VBScriptというプログラミング言語から利用します。別ページにJScriptも掲載。
当シリーズで紹介するマクロファイルやVBScriptのファイル一式は、 vovXL01.zip という圧縮ファイルに同梱しておきます。
通常、Excelの操作は、画面を見ながらマウスやキーボードで行います。
しかし、よく行う操作パターンに関しては、手順書を書いて置いて、Excelにその手順書どおりに動いてもらえると楽です。
手順書は、Excelが理解してくれるものでなければなりません。そこで、VBAという一種のプログラミング記法で手順書を書くことになります。
ここでは、そのプログラミング記法の基本的な事柄について記します。
VBAのルールに従って書かれた手順書は、よくマクロといわれます。
マクロどおりにExcelに動いてもらうためには、まずマクロをExcelに組み込む必要があります。更に、Excelを起動してそのマクロを実行しなければなりません。
しかし、「マクロを組み込む」のも「マクロを実行する」のも、手作業でやるのは面倒です。
ということで、OLEという仕組みを利用して、全自動一括処理をするよう試みます。OLEは、Excelを外部から自動操作するための機構です。「組込み」が必要ありません。
OLEを利用する手段としてVBScriptを用います。test.vbsのような拡張子が .vbs のプログラムファイルです。
VBA, VBScriptのどちらも Visual Basicをベースにしているので類似する点が多いです。
OLEという仕組みを使うといっても、Excelが理解してくれるVBAのルールに従うという点は同じです。
なので、まずは VBAのマクロに触れて、それから VBScriptのプログラムについて記します。なお、VBScriptの「プログラム」は、「スクリプト」ともいいます。
掲載するのは、VBAのマクロ、OLEを利用するVBScriptプログラムの2種類です。同等の処理を2種類の形で示します。
具体的な例を上げると下のとおり。
まず VBAマクロです。A1セルに test の4文字を書き込みます。
-------- ここから
Sub Macro1()
Range("A1").Value = "test"
End Sub
-------- ここまで
上は、何かしらの方法でExcelに組み込む必要があります。通常は VBE(Visual Basic Editor)というマクロ編集用のエディタで行います。
また、このマクロを実行するには、Excelを起動した状態でメニューからマクロの実行を選択しなければなりません。
次に OLEを利用するVBScriptです。マクロの組込みは行いません。
プログラムが test.vbs という名前で保存されている場合、それを実行すると、
Excelが起動し、A1セルに test の4文字が書き込まれ、Book1.xls という名前でExcelファイルが保存され、Excelが終了します。
-------- ここから
Option Explicit
Dim FSO, APP, WBobj
Set FSO = CreateObject("Scripting.FileSystemObject")
Set APP = CreateObject("Excel.Application")
Set WBobj = APP.Workbooks.Add()
WBobj.ActiveSheet.Range("A1").Value = "test"
WBobj.SaveAs FSO.GetAbsolutePathName("Book1"), -4143
APP.Quit
-------- ここまで
上の test.vbs を実行するには、Explorer(マイコンピュータ)上で test.vbs に焦点を当て、エンターキーをたたきます。あるいは、ダブルクリックするといった方がいいでしょうか。
そうすれば、Excelの起動から終了まで自動的に実行されて、カレントフォルダに Book1.xls ができているはずです。
マクロとスクリプトを実行した環境は次のとおり。
上記以外でも、Excelがインストールされていれば、たいていはマクロとスクリプトを動かせると思います。
VBScriptは、よほど古いWindowsでないかぎり、最初から使えるようになっています。
VBAのマクロをExcelに組み込む処理を手作業でやりたくないので、「組込み」のためのVBScriptプログラムを用意しました。
SetExcelMacro.vbsがそれです。vovXL01.zipに同梱してあります。
SetExcelMacro.vbs を実行すると、ファイル選択ダイアログボックスが出るので、macro01.txtなどのマクロファイルを選びます。
すると、そのマクロが組み込まれて Book1.xls というExcelファイルが保存されます。
また、マクロには Control + j
というショートカットキーが割り当てられます。
Book1.xls をExcelで開いてから Control + j
を入力するとマクロが実行されます。
ということで、VBEを立ち上げてマクロのコードを入力する必要はありませんが、
Excelのマクロセキュリティの設定をあらかじめ変更しておく必要があります。
設定変更は一度やるだけでOKです。
ExcelをGUI操作して、次の設定変更を行います。具体的な操作方法は、Excelのバージョンによって違うのでここでは省略します。
上記は Excelのセキュリティを緩める処置です。あまり神経質にならなくてもいいとは思いますが、気になるようでしたら、SetExcelMacro.vbsによるマクロの組み込みをやらない時はセキュリティを強化しておく方がいいかもしれません。
なお、OLEを利用するVBScriptのプログラムを実行する場合は、上記のExcelのセキュリティを緩める処置は必要ありません。
前述の test.vbs を実行するときは、セキュリティレベルが強固なままで大丈夫です。
必要になるのは SetExcelMacro.vbs の実行のときです。
SetExcelMacro.vbs は、当シリーズに特化して作ったスクリプトです。汎用的に用いるには無理があります。
たとえば、クラスモジュールやユーザーフォームの組込みには対応しません。
また、マクロの組込み以外のいろいろな事柄が盛り込まれています。ファイルの削除、ファイル選択ダイアログ、ファイル名に関する操作等々。
なので、「マクロの組込み」に注目しようとしても、分かりにくいものになっています。
VBScriptを使ってマクロを組み込む方法に興味がある場合は、次のサイトを参考にして下さい。
上記サイトではマクロの組込みに関する解説とサンプルプログラムを掲載しています。
手作業でマクロを組み込みたいときに、次のショートカットキーが便利です。
Excelを起動した後で次ぎの二つのショートカットキーを入力すると、VBEが立ち上がり、そして、マクロのコードを入力する場面になります。
Alt + F11
: VBEの起動。F11はファンクションキー11のことです。F7
: コードウィンドウの表示。マクロを入力する場面になります。 コードウィンドウで Sub Macro1() [enter]
などと入力すると、マクロのおわりを示す End Sub
が自動的に書き込まれます。
〜 以上 〜