親父の隠れ家

親父の隠れ家

三十路を迎える親父が隠れて記事を書き始めました。

【Excel】VBAとマクロの違いって?

やれマクロ、それVBA…とExcelを使っていると飛び交う「マクロ」と「VBA」という言葉。

 

社内のオジサンにExcelを教えているとよく「何が違うんだ?」と聞かれるのですが

 

(本質的に)何も違わないです

 

そう答えると、頭の上に「?」が50個くらい浮かんで見えるんですが違わないものは違わないので仕方がない。

 

あくまで「本質的に」違わないということなので、簡単にまとめてみようと思います。


ではどうぞ。


目次

 

 


◆「マクロの記録」はどうやって記録されている?

珍しくいきなり本題に入ります。


言葉で説明するより例を用いた方が分かりやすいと思うのでまずExcelを開いてテキトーに「マクロの記録」を行ってみて下さい。

 

例では「「マクロとVBAの関係」という文字列をB10に入力する」というシンプルなものです。

f:id:CMY0630:20170618170358p:plain

 

ではこの「マクロの記録」の中身ってどうなっているのか。


言い換えると、Excelはどうやって記録しているのか。


その答えがVBAです

 


◆マクロの中身を見てみよう

これも言葉で説明するより見た方が分かりやすいので先程の「「マクロとVBAの関係」という文字列をB10に入力する」というマクロの中身を見てみましょう。

 

中身の見方は2つ。


1.開発タブの中にある「Visual Basic」をクリック

f:id:CMY0630:20170618170632p:plain

 

もしくは

 

2.Alt + F11 (1のショートカットキー)


そこで開いたのがVBEというもので、要はVBAを記述するものです。

 

VBEに書かれているものがVBAです。

 

f:id:CMY0630:20170618170719p:plain

 

 

◆マクロの記録はVBAというプログラミングを行っている


マクロの記録はVBAというプログラミング言語に変換されてExcelに変換されているということです。

 

「「マクロとVBAの関係」という文字列をB10に入力する」という記録は


Sub マクロとVBAの関係()
'
' マクロとVBAの関係 Macro
'

'
    Range("B10").Select
    ActiveCell.FormulaR1C1 = "マクロとVBAの関係"
    Range("B11").Select
End Sub


という形に変換されているということです。

 

書き方は分からなくてもマクロの記録を行った本人であれば小学生の英語力程度でも何が書かれているのか分かるかと思います。

 

Range("B10").Select → 「B10を選択して」
ActiveCell.FormulaR = "マクロとVBAの関係" → 「アクティブセルにマクロとVBAの関係と入力」


◆まとめ

マクロとVBAは「根本的に」同じということが何となく伝わると幸いです。

 

マクロの記録はマウスやキーボードを使って間接的にVBAというプログラミングを行い、VBAは直接プログラミング言語を書いて編集する。つまり中身は同じということですね。


ならVBA勉強しなくてもマクロの記録で良いじゃん!


そんな声も聞こえてきそうですが、マクロの記録では対応できないこともあるのです。残念ながら。

 

1から作っていくのは面倒なので「マクロの記録」でベースを作りVBAで直していく…ということはよくある話です。