挫折しないVBAの始め方
"マクロの記録"のワナ
市販のExcel VBA入門書では、マクロの記録が最初に紹介されています。
「難しいプログラムなんて覚えなくても自動でマクロを作れます!簡単でしょ?あなたにも出来ます!」といった具合に。
しかしこれは本を売るための仕掛けであって、現実はそんなに甘くはありません。
むしろ、マクロの記録こそが初心者を混乱させ、VBA学習の挫折へと追いやってしまう最大の原因だとする意見があり、私もその考えを支持しています。
試しに表を飾り付けるマクロを記録してみましょう。
例)
次のコードはマクロの記録で作成したものですが、ざっと60行近く出力されています。
Sub Macro1() Range("B2:G5").Select Range("G5").Activate Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With Range("C2:G2").Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 13434828 .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("B3:B5").Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 16777164 .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub
初心者はこれを見ただけで自信を無くしてしまうかもしれません。
しかも記録されたコードはこのままでは全く同じ位置にある同サイズの表に対してしか動作しないため、到底役に立つマクロとは呼べません。つまり、マクロの記録とは言ってもそれだけで実用的なマクロを作ることは出来ず、後で編集が必要になります。
いきなりこんな長いマクロ、どこから手をつけて良いのか見当が付かないと思いますが、安心してください。これはExcelのお節介であって、本来はもっとシンプルに書くことができます。
次のコードは上と同じことをするマクロです。
Sub MyMacro1() Range("B2:G5").Borders.LineStyle = xlContinuous Range("B3:B5").Interior.Color = RGB(204, 255, 255) Range("C2:G2").Interior.Color = RGB(204, 255, 204) End Sub
今度はたったの5行です。
英語が苦手な方にとっては、これでもまだ難しいと思うかもしれませんので和訳してみます。(コードではないので貼り付けても動きません。)
Sub MyMacro1() 範囲("B2:G5").境界線.線の書式 = 連続線 '←他に点線なら、xlDotと書けます。 範囲("B3:B5").内装.色 = 赤青緑(204, 255, 255) '←それぞれ255が最大です。 範囲("C2:G2").内装.色 = 赤青緑(204, 255, 204) End Sub
英語といってもVBAプログラミングにおいて最初に覚えるべきものは20単語もありません。上のコードでいえばSubとRangeは覚える必要がありますが、あとは都度調べれば事足ります。やりたいこととからコードが検索できる、逆引き辞典が販売されていますので、それらを活用すると良いでしょう。
また、スペルが覚えられなくても、VBエディタには入力支援機能が搭載されているので、以下のように一部入力すれば選択肢から絞り込めます。
調べる方法としてマクロの記録も活用できますが、慣れないうちは記録されたマクロよりも書籍やインターネットで調べた方が理解が早いと思います。
マクロの記録だけで何か役に立つものを作ろうというのはそもそも無理があります。記録したマクロを編集しようにも文法の知識無しでは手に負えません。学習を始める前にまずはマクロの記録に対する甘い幻想を捨て、しっかり文法を学ぶことを決意してください。