t-hom’s diary

主にVBAネタを扱っているブログです。

VBAとマクロの違い ~ マクロの語源はギリシャ語

今回はVBAとマクロがどう違うのか、雑学的なお話。

よくある勘違いが以下の2つ。

  • マクロの記録によって作られたものがマクロだ。
  • マクロとVBAは同じものだ。

どちらも間違っている。

巷で正確な解説を見かけないのはたぶん、厳密に話し出すと長くなるからだろう。あるいは説明を書いている本人もよくわかってないのかもしれない。

別にVBAとマクロの違いについて正確に説明できなかったからといって特段困ることは無いけれど、よくわからずにマクロだのVBAだのと言ってるのもちょっとモヤっとすると思うので、ちょっとここらで真剣に説明しようと思う。

マクロとは何か

マクロ…まずこの言葉が曲者だ。
これはもともとマクロ命令(macro instruction)と呼ばれていたが、いつしか略されるようになったものだ。

【参考】マクロ命令 - 意味・説明・解説 : ASCII.jpデジタル用語辞典

命令であることはわかった。
それで、「マクロ」とは?

実はこれ、もともとはギリシャ語で大きいという意味の言葉(μακρο)。

ウァクポ?いや、これでマクロと読む。
英語のuに見えるのはMに相当するミュー。pに見えるのはRに相当するローである。
f:id:t-hom:20170618172312p:plain

つまり英語のアルファベットに直すとmakro(マクロ)と書かれていることに。
英語に導入されたときkの綴りがcに置き換わって接頭辞「macro-(おおきな~)」になったと思われる。

マクロ経済学Excelマクロのマクロって実は語源は同じだったという話。
ちなみに小さいを意味するミクロもギリシャ語由来だ。

マクロ命令とは何か

前述の話から、マクロ命令とは「大きな命令」という意味になる。
ただ大きな命令と言われてもピンと来ないと思うので、全自動洗濯機に例えて説明する。

f:id:t-hom:20170618173200p:plain

洗濯機は選択物を入れてスタートボタンを押すだけで全部やってくれるが、内部では注水したりドラムを回したりと小さな命令が飛び交っている。これらをひとまとめにして「洗う」という大きな命令にしたのがマクロ命令。

Excelなら、値を入れて、色を塗って、別のセルを選択してという風にいくつかの小さな命令を組み合わせて作る大きな命令がマクロ命令である。

ただ現在は「マクロ」が「マクロ命令」の略だという話はほとんど知られていないので。マクロ命令と言っても通じないだろう。

「大きい」だけ残して肝心の「命令」を略すの?って思うけど、それ言ったら「ケータイ」もそうだ。「持ち歩き」だけ残して肝心の「電話」が消えてる。

VBAとは何か

VBAはマクロ記述するときに使う言語のことだ。

たとえばこんな風に日本語で書いても動かない。

 A1セルを黄色に塗ってください。

だからこういう風にVBA言語で書く。

 Range("A1").Interior.Color = vbYellow

Microsoft Officeのマクロ機能で使用できる言語はVBAだけなので、VBA=マクロと勘違いされやすいけれど、マクロは複数の命令を組み合わせた大きな命令のことで、VBAはそれを書くための手段なので、視点が違う。

Open Officeマクロなんかは標準のOpenOffice Basic言語のほかに、Python、BeanShell、JavaScriptなどのマクロ記述言語を選択できるのでマクロと言語の違いを説明するときに引き合いに出すと分かりやすいかもしれない。
f:id:t-hom:20170618175331p:plain

複数プロシージャで構成されたマクロ

たとえば以下のようにプロシージャからプロシージャを呼ぶケースがある。

Sub ごあいさつ()
    Call コンチハ
    Call サイナラ
End Sub

Sub コンチハ()
    MsgBox "Hello"
End Sub

Sub サイナラ()
    MsgBox "GoodBye"
End Sub

このとき、「ごあいさつ」プロシージャは、コンチハ・サイナラの2つのプロシージャを呼び出しているので、これらをひっくるめて一つのマクロであるといえる。
一方で、コンチハ・サイナラはそれぞれ単体で実行できるので、それぞれが独立したマクロであるとも言える。
※MsgBox一つしか命令がないのでマクロ命令の説明と矛盾するけど、慣例的にこれもマクロと呼ぶ。

このように複数命令が存在するときは、「ごあいさつマクロ」と「ごあいさつプロシージャ」では指す範囲が変わってくるので注意。

ひとつのマクロはひとつ、あるいはそれ以上のプロシージャから構成される。
マクロは目的を持った完成品、プロシージャは部品、VBAは記述言語といったイメージ。

Excel VBAExcel マクロ

Excel VBAという呼び方があるけれど、実際にExcel専用のVBA言語があるわけではない。VBA言語自体は他のOfficeアプリでも共通のものである。
f:id:t-hom:20170618180818p:plain

VBA言語を用いてExcelを操作する行為やそのノウハウなどを指して便宜的にExcel VBAと呼んでいるだけ。言語名はあくまでVBA

一方、完成したものをExcel マクロと呼ぶのは自然である。

まとめ

最後に冒頭の勘違いに対して訂正をいれてまとめにしよう。

「マクロの記録によって作られたものがマクロだ。」
→No!

マクロの記録はマクロを作る手段の一つであり、実際にはVBAコードが記録される。
そしてVBAを手で書いても、マクロの記録で作成しても、完成したものはマクロと呼ぶ。

「マクロとVBAは同じものだ。」
→No!

マクロは完成した「大きな命令」を指し、それを記述する言語がVBAである。
同じコードに対し、「これはVBAである。これはマクロでもある。」という説明が成り立つことがあるが、2つの用語は切り口が違うので間違えて知ったかぶらないようにしたい。

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