t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Excel VBAのRangeは、実はVBAの命令ではない

今回は雑学的な話。
しかも間違ってるかもしれないので、鵜呑みにせずあくまで一つの仮説として読んで欲しい。

私が超初心者のころは、よくある勘違いとして、マクロの記録機能をマクロだと思っていた。でも今回はそんな勘違いの話ではない。

一般的なマクロとVBAの定義はこのサイトでよく分かる。
Office TANAKA - 今さら聞けないVBA「マクロとVBAの違い」

でも調べてみたら、VBAという言語にはRangeなどのExcel操作は含まれていないのではないかという気がしてきた。
試しに新規作成したExcelファイルの参照設定を見ると次のようになっている。
f:id:t-hom:20150219045824p:plain
下2つは外すことができたが、VBA本体と思われるVisual Basic For ApplicationsとExcelを指すMicrosoft Excel 15.0 Object Libraryは使用中のオブジェクトは外せないというエラーが出た。

VBAの場所を見ると、C:\Program Files\Common Files\Microsoft Shared\VBA\VBAとなっている。

まあ、そんな場所は見つからないのだが。。
f:id:t-hom:20150219050307p:plain

Word、PowerPointAccessOutlook全部調べてみたが、VBAの場所は同じなのでVBA自体は共通で、読み込んでいるオブジェクトライブラリの違いで○○VBAと呼ばれているだけらしい。

というわけで、Excel VBAのRange操作は、厳密にはVBAの命令ではなくて、VBAからのオブジェクト操作であると言える。

ちなみにExcelオブジェクト自体は、他の言語から操作することもできるようだ。
参考:RubyでExcelを操作する
これでますます、VBA命令ではなくライブラリの操作であることが分かった。

一方、マクロというのは元々の意味を調べていくと、元々はアセンブラで使われていた用語「マクロ命令(Macro Instruction)」が転じてマクロになったらしい。(英語版Wikipediaより)
ではマクロという言葉はというと、ギリシャ語で大きいを意味するμακρο(pみたいなのは、ギリシャ文字のロー)である。

つまり、複数の命令をひとかたまりの大きな命令として扱うから、マクロ命令というわけだ。

Rangeに対する操作は、すなわちExcelへの命令であるから、これを集めたものはマクロと言っていい。
しかしVBA命令かと言うと、厳密には違う。でもExcel VBAと呼ぶのは間違っていない。

マクロの記録で記録されるのは、ほとんどExcelオブジェクトの操作であって、純粋なVBA命令と言えるのはSubプロシージャ構文ととWith構文くらいである。

やはり、マクロとVBAは別物と言える。包括関係といった方が良いか。。

私は今のところ、以下のように理解している。
ExcelVBA = VBA + ExcelObjects操作
マクロ機能 = ExcelVBA + マクロ記録機能 +セキュリティ機能 + その他(マクロ実行・オプションなど)

以上

関連記事

thom.hateblo.jp

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。