今回はVBAとマクロがどう違うのか、雑学的なお話。
よくある勘違いが以下の2つ。
- マクロの記録によって作られたものがマクロだ。
- マクロとVBAは同じものだ。
どちらも間違っている。
巷で正確な解説を見かけないのはたぶん、厳密に話し出すと長くなるからだろう。あるいは説明を書いている本人もよくわかってないのかもしれない。
別にVBAとマクロの違いについて正確に説明できなかったからといって特段困ることは無いけれど、よくわからずにマクロだのVBAだのと言ってるのもちょっとモヤっとすると思うので、ちょっとここらで真剣に説明しようと思う。
マクロとは何か
マクロ…まずこの言葉が曲者だ。
これはもともとマクロ命令(macro instruction)と呼ばれていたが、いつしか略されるようになったものだ。
【参考】マクロ命令 - 意味・説明・解説 : ASCII.jpデジタル用語辞典
命令であることはわかった。
それで、「マクロ」とは?
実はこれ、もともとはギリシャ語で大きいという意味の言葉(μακρο)。
ウァクポ?いや、これでマクロと読む。
英語のuに見えるのはMに相当するミュー。pに見えるのはRに相当するローである。
つまり英語のアルファベットに直すとmakro(マクロ)と書かれていることに。
英語に導入されたときkの綴りがcに置き換わって接頭辞「macro-(おおきな~)」になったと思われる。
マクロ経済学とExcelマクロのマクロって実は語源は同じだったという話。
ちなみに小さいを意味するミクロもギリシャ語由来だ。
マクロ命令とは何か
前述の話から、マクロ命令とは「大きな命令」という意味になる。
ただ大きな命令と言われてもピンと来ないと思うので、全自動洗濯機に例えて説明する。
洗濯機は選択物を入れてスタートボタンを押すだけで全部やってくれるが、内部では注水したりドラムを回したりと小さな命令が飛び交っている。これらをひとまとめにして「洗う」という大きな命令にしたのがマクロ命令。
Excelなら、値を入れて、色を塗って、別のセルを選択してという風にいくつかの小さな命令を組み合わせて作る大きな命令がマクロ命令である。
ただ現在は「マクロ」が「マクロ命令」の略だという話はほとんど知られていないので。マクロ命令と言っても通じないだろう。
「大きい」だけ残して肝心の「命令」を略すの?って思うけど、それ言ったら「ケータイ」もそうだ。「持ち歩き」だけ残して肝心の「電話」が消えてる。
VBAとは何か
VBAはマクロ記述するときに使う言語のことだ。
たとえばこんな風に日本語で書いても動かない。
A1セルを黄色に塗ってください。
だからこういう風にVBA言語で書く。
Range("A1").Interior.Color = vbYellow
Microsoft Officeのマクロ機能で使用できる言語はVBAだけなので、VBA=マクロと勘違いされやすいけれど、マクロは複数の命令を組み合わせた大きな命令のことで、VBAはそれを書くための手段なので、視点が違う。
Open Officeマクロなんかは標準のOpenOffice Basic言語のほかに、Python、BeanShell、JavaScriptなどのマクロ記述言語を選択できるのでマクロと言語の違いを説明するときに引き合いに出すと分かりやすいかもしれない。
複数プロシージャで構成されたマクロ
たとえば以下のようにプロシージャからプロシージャを呼ぶケースがある。
Sub ごあいさつ() Call コンチハ Call サイナラ End Sub Sub コンチハ() MsgBox "Hello" End Sub Sub サイナラ() MsgBox "GoodBye" End Sub
このとき、「ごあいさつ」プロシージャは、コンチハ・サイナラの2つのプロシージャを呼び出しているので、これらをひっくるめて一つのマクロであるといえる。
一方で、コンチハ・サイナラはそれぞれ単体で実行できるので、それぞれが独立したマクロであるとも言える。
※MsgBox一つしか命令がないのでマクロ命令の説明と矛盾するけど、慣例的にこれもマクロと呼ぶ。
このように複数命令が存在するときは、「ごあいさつマクロ」と「ごあいさつプロシージャ」では指す範囲が変わってくるので注意。
ひとつのマクロはひとつ、あるいはそれ以上のプロシージャから構成される。
マクロは目的を持った完成品、プロシージャは部品、VBAは記述言語といったイメージ。