You.Activate

挫折しない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エディタには入力支援機能が搭載されているので、以下のように一部入力すれば選択肢から絞り込めます。

VBEの入力補完デモアニメーション

調べる方法としてマクロの記録も活用できますが、慣れないうちは記録されたマクロよりも書籍やインターネットで調べた方が理解が早いと思います。

マクロの記録だけで何か役に立つものを作ろうというのはそもそも無理があります。記録したマクロを編集しようにも文法の知識無しでは手に負えません。学習を始める前にまずはマクロの記録に対する甘い幻想を捨て、しっかり文法を学ぶことを決意してください。