今回は雑学的な話。
しかも間違ってるかもしれないので、鵜呑みにせずあくまで一つの仮説として読んで欲しい。
私が超初心者のころは、よくある勘違いとして、マクロの記録機能をマクロだと思っていた。でも今回はそんな勘違いの話ではない。
一般的なマクロとVBAの定義はこのサイトでよく分かる。
Office TANAKA - 今さら聞けないVBA「マクロとVBAの違い」
でも調べてみたら、VBAという言語にはRangeなどのExcel操作は含まれていないのではないかという気がしてきた。
試しに新規作成したExcelファイルの参照設定を見ると次のようになっている。
下2つは外すことができたが、VBA本体と思われるVisual Basic For ApplicationsとExcelを指すMicrosoft Excel 15.0 Object Libraryは使用中のオブジェクトは外せないというエラーが出た。
VBAの場所を見ると、C:\Program Files\Common Files\Microsoft Shared\VBA\VBAとなっている。
まあ、そんな場所は見つからないのだが。。
Word、PowerPoint、Access、Outlook全部調べてみたが、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 + マクロ記録機能 +セキュリティ機能 + その他(マクロ実行・オプションなど)
以上