VBAの条件付きコンパイルって普通のIF文となにが違うんだって思ってた話
VBAに条件付きコンパイルという機能があるんだが、最近まで使ってなかったのを少し後悔したという話。
サラリーマン業務の効率化のため、自己研鑽として独学で4年ほどかけてVBAを習得してきたわけだが、下記エントリでも書いたように最近は対価をもらえるようになってきた。
で、対価をもらうようになると、やはり目線が変わってくるわけで。
On Error GoToを使うべきなのか
納品するVBAでエラーとか出すとダサいんで、出たとしてもエラーハンドルに飛ばして、「こんなエラーだと思うよ」みたいなメッセージ出すのがわりとありがちのようで。
それはそれでいいんだが、デバッグ中はむしろエラー時にまとめてエラーハンドルに飛んじゃうんでむしろミスってる箇所が見えなかったりして具合が悪い。
かといって、納品時にまとめてOn Errorステートメントとかのコメント解除するとなると、プロシージャ多い場合にほぼ確実に戻し忘れとか発生すると思う。
そんなときに条件付きコンパイルが役に立つってことが分かった。
条件付きコンパイルは普通のIF文とは違う
今回の記事の主題はこれ。
最初、条件付きコンパイルのドキュメント見たときは、「#Constで定数宣言して、IF文書くだけやろ」と思ってなんも注目してなかった。
いきなり例を書くが、これが一番わかりやすいと思う。
#Const conEnv=1
#If ConEnv=1 Then
On Error GoTo Err_Handler
#End If
Dim i As Long
#If conEnv = 1 Then
For i = 1 To 5
#Else
For i = 1 To 6
#End If
Debug.Print i
Next i
こういう感じで条件付きコンパイルの場合は、For文の前半だけとかどんなステートメントでもいけるってのが重要だってのに気付いたわけだ。
「いや、どんなマヌケだよ最初見たときに分かれよ」って感じなんだが、やっぱりコーディングって必要に駆られないとなにも頭に入ってこないと改めて思った。
昨今のプログラミング学習ブームに思うこと
最近は、どうも必要以上にプログラミングがもてはやされてる感がすさまじいが、個人的には「感化されて『書き始める』ならまだしも『勉強』し始めてるならちょっとズレてるんじゃないの」っていう思いがある。
プログラミングが得意な人って、「まず手を動かして自分で試行錯誤するタイプ」だと思っていて、誰かにそそのかされて「いま必要としていないこと」を学んだところで効率メチャクチャ悪いだろうと。
なんていうか「実装したい機能」が先にあるべきモノであって、手段は随時必要になるから習得されるんだと思うわけだ。
で、ある程度のコーディングが我流で出来るようになってようやく体系的な知識ってのが必要となるし、わかるようになる。
たとえば、この本は自分がそこそこVBA書けるようになったあたりでクラスモジュールについてちゃんと勉強したくて買った本だが、正直ビギナーのときにクラスモジュールの章を読んでも意味不明だしメリットも理解できなかったと思う。
この本自体は、本当によくまとまっているので超オススメだ。
私が実際にVBAで対価を得られるようになったのも、実務ベースなこの本あってのことだったと思う。
表紙の通り「実戦のため」にめちゃくちゃ役だってくれたワケだが、必要に駆られていた状態だったからこそ普通に読むより何倍もその効果を発揮したんだと断言できる。
結局なにが言いたいかというと、常に「作りたいモノ」が先にあるべきじゃないのかなということ。
そうでないと正直プログラミングなんて辛いだけの作業だと思う。
よろしければサポートお願いします🥕 サポートはレビュー記事作成の原資となります