VBA技術解説
ExecuteExcel4Macroについて

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2013年5月以前 最終更新日:2020-09-28

ExecuteExcel4Macroについて


ExecuteExcel4Macroは、Excel4.0のマクロを実行します。
つまり、昔のマクロを使うということです。
VBAが使える前にあったものですが、最新バージョンのエクセルでも使用できます。


とはいえ、積極的に使うようなものでもないですし、
MSもVBAへの移行を勧めています。

しかし、とても便利な機能もありますので、
VBAで困った時の、手段の一つとしては、考えても良いかもしれません。
そこで、簡単に説明する事にしました。

他ブックのデータを、ブックを開かずに取得する

Range("A1") = ExecuteExcel4Macro("'C:\Excel\[test.xls]Sheet1'!R1C2")

上記を実行すると、「C:\Excel\test.xls」のシート「Sheet1」のA1セルの値を取得します。
ブックを開かないので、VBAで普通にブックを開いて取得する場合に比べると格段に速いです。
しかし、この場合は、1つづつのセルしか取得できません、複数セルを一括で取得できないです。
ですから、複数セルの取得が必要で、そのセル数が多い時は、逆にこれでは遅くなってしまう事もあり得ます。
また、関数を使う事も出来ます。

Range("A1") = ExecuteExcel4Macro("AVERAGE('C:\[test.xls]Sheet1'!R1C1:R10C1)")

このように関数を使えますので、使い方によっては、大変便利で、高速に動作します。

文字列としての計算式を計算する

Excel 4.0 マクロで使える関数についての、資料が今となっては入手困難ですが、
中には、極めて便利なものもあります。
Excel 4.0のコマンドにEVALUATEがあります。
実際に使うことはないと思いますが、参考として紹介しておきます。

Dim strCalc As String
strCalc = "(10+20)*2"
Range("A1") = ExecuteExcel4Macro("EVALUATE(" & strCalc & ")")

上記を実行すると、A1セルに「60」とし入ります。
EVALUATE関数は、文字列としての数式を計算してくれます。
この機能は、代替えがありませんので、
このような必要性に迫られたら、真っ先に検討に値すると思います。

ただしVBAでは、ApplicationのメソッドにEVALUATEがありますので、
上記は、以下のように書くことができます。

Dim strCalc As String
strCalc = "(10+20)*2"
Range("A1") = Evaluate(strCalc)

ExecuteExcel4Macroの使用例

以下は、本サイト内でExecuteExcel4Macroを使用したVBAサンプルを紹介しているページになります。

ブックを開かずにセル値を取得(ExecuteExcel4Macro,Excel.Application)
・ExecuteExcel4Macroで1個のセル値を取得 ・Excel.Applicationで1個のセル値を取得 ・ExecuteExcel4Macroで100個のセル値を取得 ・Excel.Applicationで100個のセル値を取得 ・Excel.Applicationで100個のセル値を取得2 ・ブックを開かずにセル値を取得

Excelファイルを開かずにシート名を取得|VBAサンプル集
Excelファイルを開くときは、ファイルサイズに比して、とても遅い場合があります、ファイルを開かずに、Excelの情報を取得したいという要望は少なからずあるようです、そこで、処理の基本となるシート名を取得する方法になります。もちろん、開かないと言っても、厳密には必ず開いているわけですが、Excelのブックとして開か…

リボンを非表示、2003以前ならメニューを非表示
Excel2007以降のリボンは幅を取られて邪魔な場合があります、特に業務アプリの場合は、リボンを消したい事も多いと思います。リボンを消すだけなら、消えているリボンを表示する場合は、Application.ExecuteExcel4Macro"SHOW.TOOLBAR(""Ribbon…

ExecuteExcel4Macroの最後に

Excel4Macroは、とても便利なのですが、
既に詳しい解説資料もほとんどないですし、
いつサポートされなくなるか分かりませんので、なるべく使わない方が良いでしょう。
よほど、特殊な事情があり、Excel4Macroなら簡単に解決できそうな場合にのみ検討して下さい。



同じテーマ「マクロVBA技術解説」の記事

マクロ作成後に表位置がずれた場合の対処

・表位置がずれた場合の対処 ・表位置がずれることを想定したVBA ・テーブルならずれても問題ありません
ExecuteExcel4Macroについて
「Excel 4.0 マクロ」の使い方
・きっかけとなったツイート ・「Excel 4.0 マクロ」について ・「Excel 4.0 マクロ」の使用例
再帰呼出しについて(再帰プロシージャー)
・指定数値の階乗を求める再帰VBA ・再帰プロシージャで考慮すべき事項 ・再帰呼び出しの実践例
フィボナッチ数列(再帰呼び出し)
・フィボナッチ数列を出力する再帰VBA ・再帰呼び出しを使わない場合のVBA ・再帰プロシージャで考慮すべき事項 ・再帰呼び出しの実践例
文字列でのセル参照と文字列の計算式について(Evaluate,INDIRECT)
セルまたはセル範囲を表す文字列からセル参照する場合と、文字列としての計算式から計算する場合です。"Sheet1"の A1に、"Sheet2" B1に、"A1" "Sheet2"の A1に、"(2+3)*2" このよう…
リボンを非表示、2003以前ならメニューを非表示
Excel2007以降のリボンは幅を取られて邪魔な場合があります、特に業務アプリの場合は、リボンを消したい事も多いと思います。リボンを消すだけなら、消えているリボンを表示する場合は、Application.ExecuteExcel4Macro"SHOW.TOOLBAR(""Ribbon…
印刷ページ設定の余白をセンチで指定する(CentimetersToPoints)
印刷のページ設定の余白サイズは、自動記録ではApplication.InchesToPointsで記録されます、しかし、ページ設定のダイアログ画面ではセンチで指定しているので、どうもしっくりしません。できれば、余白サイズはセンチで指定したいものです。
文字列としてのプロシージャー名を起動する方法(Run,OnTime)
文字列変数の中にプロシージャー名が入っていて、そのプロシージャーを起動したい場合になります、実際には、そのような構造が良いとは思えませんが、知っていればプログラミングの幅が広がります。使うのは、OnTimeメソッドorRunメソッドになります。
ドキュメントの作成者を取得(GetObject,BuiltinDocumentProperties)
エクスプローラーで表示される作成者を取得したいとの問い合わせを受けたので改めて確認をしました、所有者と混同されがちですが全く別のものになります、DOSのDIRで表示できるものは所有者になります。従ってVBAでShell.Applicationで作成者を取得すると書かれているものは全て勘違いをしています。
画像サイズ(横x縦)の取得について
・LoadPictur 関数 ・AddPictureしてから取得 ・APIを使用


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

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




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


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


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