マクロとVBAの違いって何だ?
マクロに手を出し始めの頃によくある「"マクロ"と"VisualBasic"と"VBA"の違いがよく分からん」とか「なんとなくは分かるんだけど・・・」と言ったモヤモヤがある方に向けて書いていきます。
マクロとVisualBasicの違い
マクロの特徴
- やった操作を覚えてくれる("手順の録画と再生"というイメージ)
- 覚えた手順はVBAで自動的に書かれている
- 「VBAの記述通りに自動で動く機能、モジュール(プログラムが書かれたファイル)」がマクロ。
- モジュールの中身が「VBAの書式で書かれたコード」
VisualBasicの特徴
- "Visual Basic for Application"略して"VBA"のプログラム言語で書かれたプログラム
- マクロの中身はコレ。「マクロの編集」で開くウィンドウもコレ。同一の物。
- 記録したマクロの中身は"VisualBasic"で書き換えられる
- よくプログラム開発で使われていた「VisualBasic」とは似て非なるもの。Excel用の言語という認識。
- 実はWord、AccessにもVBAはあるが、書式は各々微妙に違う
マクロ最初の1歩のつまづきポイントってこれじゃね?
- まず手始めに「マクロの記録」で手順を覚えさせる。
- 再生するとやった通りに動いてくれる。
- 「じゃあ他のセルにもやってみよう」と思って再度起動すると「ほんとにそのまんま動く」ので「違う、そうじゃない」ってなる
- 直そうと思って"マクロの編集"を押すと、なにやら難しいプログラムがいっぱい書かれてて、ぐへぇ('Д`)ってなる。
- もう一回記録をし直したりしているうちに、NGカットのマクロが量産されて尚更ぐへぇ('Д`)ってなる。
マクロの自動記録で書かれる内容は、記録開始からの1挙動1挙動を記録します。なので、無駄な動きをするとそれも記録されてしまいます。それこそ、たまたま別のセルをクリックした動作、マウスでのスクロールなんかも動作として記録されます。
なので出来上がったプログラムは
- ボリュームが多い
- 無駄な記述が多い
- Excelのセルの配置が変わればたちまち使えなくなる
という内容で出来上がります。
自動記録でそのまま書かれたソースコード
Sub Macro1()
'
' Macro1 Macro
'
'コメントアウト部分は筆者追記。
Range("A1:A6").Select 'A1セルからA6まで範囲指定
Selection.Copy '選択されている所をコピー
Range("C1").Select 'C1のセルを選択
ActiveSheet.Paste '今のシートに貼り付け
Range("C1:C6").Select 'C1セルからC6まで範囲指定
Application.CutCopyMode = False 'コピペモードを終了
With Selection.Interior '選んだ範囲の
.Pattern = xlSolid 'セルに黄色を塗りつぶし
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Font '選んだ範囲のフォントを
.Color = -16776961 '赤色に塗る
.TintAndShade = 0
End With
ActiveWindow.SmallScroll Down:=15 'スクロールバーを下にスクロール
Range("F43").Select 'F43のセルを選択
ActiveWindow.SmallScroll Down:=-27 'スクロールバーを上にスクロール
Range("C1:C6").Select 'C1セルからC6まで範囲指定
Selection.Font.Bold = True '選んだ範囲の文字を太字にする
Range("C7").Select 'C7セルを選択
End Sub
動かしたことがそのまんま書かれています。スクロールの命令が書かれているのはただの操作ミスですが、それでもシッカリ書かれます。しかも隙間なしに。やったことはこれだけなんですが。
しかし、これを手直しするには「VBAの文法は多少でも読み書きできるようになる」ことが必要になります。
結局勉強しないとダメなのかよぐへぇ('Д`)
とお思いでしょう。しかし、マクロがVBAで書かれている以上、マクロを使いこなすなら避けては通れません。
どうしても避けて通りたい、とあれば、最近流行りの「RPAでノーコード開発」という手もありますが、これもこれでなりなり高額&組み方の勉強は必要です。しかし、予算が割けるなら業務全体の効率化にもつながるのでやる価値はあると思います。
勉強は必要ですがコツと近道はあります。今後VBAに本腰を上げるならば、以下をぜひ実践していただきたいのです。
VBAに本腰を上げるなら実践してほしいポイント
Point
- 人が書いた、簡単で、ぱっと見これなら分かりそう、というVBAのコードをパクる
- パクったコードを「ステップ実行」で納得するまで動きを見る
- VBAにやらせたいけど、言葉にできなくて検索ワードが思いつかないときは、その部分だけ「マクロの自動記録」をしてコードを見てみる
- 納得のいく動きをしたプログラムはテキストファイルとして保存して貯めておく
順に見ていきましょう。
人が書いた、簡単で、ぱっと見これなら分かりそう、というVBAのコードをパクる
上でも書いてますが、自動記録で書かれたソースコードは見づらい分かりづらい応用が効かないです。
しかし、VBAを1から書ける人が組んだソースは分かりやすいです。
私が同じコードを書いてみた。
Sub Macro1()
'コピペ
Range("A1:A6").Copy
Range("C1:C6").PasteSpecial
'選んだ範囲のセルに黄色を塗りつぶし
Range("C1:C6").Interior.ColorIndex = 6
'選んだ範囲のフォントを赤色に塗る
Range("C1:C6").Font.ColorIndex = 3
End Sub
先程の自動記録と全く同じ処理です。
これならば「ColorIndexって何よ?」くらいは思ったとしても、他は何とか理解できそうな気がしませんか?
ちなみにこのサイトのプログラム、何にも役には立たないと思いますが、自由にパクって構いませんw
私はVBAを解説しているサイトのサンプルで勉強しました。
http://officetanaka.net/index.stm Office TANAKA 様
https://excel-ubara.com/ Excelの神髄 様
パクったコードを「ステップ実行」で納得するまで動きを見る
お気に入りのソースコードを見つけたらVisualBasicのコードウィンドウに貼り付けて「ステップ実行」をやってみます。F8キーを押せばできます。
ちなみにマクロのソースが一般的に書かれるのは「標準モジュール」の「Module1」とかに書かれます。シート内に書くパターンとかクラスモジュールとか、名前も自由に変えられるとか色々あるんですがここでは割愛。
F8キーを押しながらExcel上の内容がどう変わっていくのかを観察します。何度も見ていると処理しているさまがイメージできるようになってきます。
ステップ入力はエラーが出た時のエラー探しにも使う常套手段ですので、やり方を体に染みつかせておいた方が良いと思います。
割と文法が理解できてくるとプログラム作りは”Don't Think. feel.”な世界になってきます。
VBAにやらせたいけど、言葉にできなくて検索ワードが思いつかないときは、その部分だけ「マクロの自動記録」をしてコードを見てみる
目の前でやってる「このボタンを押したときになるコレ」の処理名称が分からない、ということよくあると思います。
その時こそ自動記録の出番です。
その分からない処理だけを記録して、記録されたソースを見てみましょう。
すると、命令文が書かれているのでそれをコピペしてググればよいのです。
納得のいく動きをしたプログラムはテキストファイルとして保存して貯めておく
動きを理解したプログラムは自分の糧になります。その意味で勉強した内容を保存しておく。そういった側面もありますが、もっと実質的な側面があります。それは
ということ。
動きをマスターしたこの処理と、あの時使った分岐処理を組み合わせれば、あの処理できるようになるんじゃね?とひらめきが来た時にサッとコピペして使いまわせます。
コードを書く時間も短縮できるし、マスターした書き方だから応用も効かせやすいです。
もし、コピペしてうまくいかなったら、本体を直したあと、保存していたソースも修正してブラッシュアップしましょう。
地道に覚えるのはツライとは思いますが、まずは簡単なミニツールを目標として作ってみましょう。
当ブログでも、そんなちゃちなちっちゃなプログラムを公開しています。そちらも参考にしてみてください。