初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel エクセルマクロVBA入門-制御構文(Select Case文)

これがSelect Case文です。

Sub test()

	Select Sheet1.Range("A1").Value
	        Case 1
		MsgBox "1です。"
		Case 2
	    	MsgBox "2です"
		Case 3
	    	MsgBox "3です"
		Case "○"
	    	MsgBox "OKです"
		Case "×"
	    	MsgBox "NGです"
		Case Else
	    	MsgBox "どれでもありません"
	End Select

End Sub


いきなりコードから始めてみましたよと。これが制御構文のIF文のお仲間でSelect Case文と言います。Selectの後に評価する変数やセルの値を入れておき、その値がCase以下の値によって処理を変えています。この場合なら、セルA1の値が1なら1です。2なら2です。というようにそして条件以外のどれでもない場合も処理をしたい場合はCase Elseとしてその下に処理書きます。

前回同じように書いたものがIF文でもありましたね。

Sub test()

	If Sheet1.Range("A1").Value = "1" Then
	    MsgBox "1です。"
	ElseIf Sheet1.Range("A1").Value = "2"
	    MsgBox "2です"
	ElseIf Sheet1.Range("A1").Value = "3"
	    MsgBox "3です"
	ElseIf Sheet1.Range("A1").Value = "4"
	    MsgBox "4です"
	ElseIf Sheet1.Range("A1").Value = "5"
	    MsgBox "5です"
	Else
	    MsgBox "1~5ではありません"
	End If
End Sub

どちらがすっきりとしてるかな?とか、見やすいかな?という観点でそれぞれ選んでもらえれば良いと思います。また、条件でいろいろと変更したい場合もありますよね。その場合はISを使って書きます。

Sub test()

	Select Sheet1.Range("A1").Value
	        Case IS < 50
		MsgBox "もう少し頑張りましょう"
		Case IS < 70
	    	MsgBox "あと少しです!"
		Case IS < 100
	    	MsgBox "惜しい!もう少しで満点!"
		Case 100
	    	MsgBox "おめでとう!満点です!"
		Case Else
	    	MsgBox "どれでもありません"
	End Select

End Sub

このように書いて行きます。Select文もプログラミングの基礎でやった例にもれず上から順番に実行して条件も上から順番に評価していきます。条件を満たした以後の評価は行われません。これでSelect文はおしまいです。

IF文とSelect文はどう使い分けるの?


結構よく聞かれるのがこれです。このあたりはもはや好みの世界になりますが、基本的に条件が複雑な場合はIf文を使い、条件がシンプルだがケースが多い場合はSelect Case文を使うことが多いです。条件がシンプルだけどケースが多い場合はIF文の条件式が見にくくなってしまうからです。要するに同じような条件式が並ぶことで見にくくなるわけですね。そういう場合はSelect Case文で書くと意外とすっきりと書けると思います。

制御構文はマクロの記録では決してわからない。


このようなIF文やSelect Case文はマクロの記録をしても絶対に出てこない文章です。変数もそうなんですが・・・いかにエクセルのマクロを作る時にプログラミングを勉強することこそが、大切なことなのか?ということが理解できると思います。
これらの制御構文が使えるというだけで、かなりのことができるからです。IFだけでも、結構すごいマクロが作れたりします。

ですが、ほんとのすごさは次回の繰り返しでしょう。これができるようになれば、マクロはもうある程度自由自在に使えるようになってきます。


今日はここまで!


かしこ。