Java屋がハマったExcelVBAの罠「Exit Sub」

Excel VBA,IT関連,プログラミング言語

十数年ぶりにExcelVBAを触ったので色々とハマったのですが、その中でも自分でポンコツやなぁーっと思った事例を戒めを兼ねて記録に残しておきます。


まずは例外処理・・・、例外を扱うためのtry-catch構文が利用できないのでエラー処理ですね。

いやぁ、普通にtryから書き始めてしまったので構文エラーでなぜだぁーから始まるというポンコツっぷりです。

そもそもVBAのエラー処理ってどうやるんだっけ?からスタートです。

そこで絶望を味わうことになります。

ラベルに飛ばす・・・だと・・・

今時そんなことあるの?っという疑問の中、疑似try-catch-finallyをやっている人もいるようですが、やはりラベルの活用方法です。

言語で実装されていないので有れば致し方ありません。

郷に入っては郷に従えというようにエラー処理はラベル定義で行うしかないようです。

Option Explicit

sub hoge_Click()

    On Error GoTo foo
    '処理

foo:
    'エラー処理
End Sub

賢明な皆さまなら直ぐにやっちまった箇所がお分かりだと思います。

はい、正常系でもエラー処理がされてしまいます(汗)

始めは冗談抜きで何でエラー処理がされているのか分からず迷子になっていました。

「処理」の中でループをかましていたのでここが何か記述ミスがあるんだと思い込んで見る場所を見余っていました。


そもそもVBAに触りたくないという気持ちでネガティブな状態で作っていましたし。

業務命令でお客様指定の仕事で無ければわしは絶対に触りたくないので、Excelに限らずバリバリのVBA屋さんは尊敬します。

さぁ、答えは簡単ですね。

「Exit Sub」で正常系を抜けていないのでそのままエラー処理で飛ばすラベル部分の処理も実行されていただけでした。

ホント自分のポンコツっぷりに涙しか出ませんでした。

正しく書けば以下の通りです。

Option Explicit

sub hoge_Click()

    On Error GoTo foo
    '処理

Exit Sub

foo:
    'エラー処理
End Sub

めちゃくちゃ初歩的な部分ですが、普段ラベル処理なんて行わないので完全に気付くのが遅れました。

「End Sub」があるから関数はちゃんと閉じてるしなぁーっという思い込みも原因の一因だと思われます。

思い込みからの数十分の無駄時間を作ってしまいましたが、これもまた勉強という事で。


さてこの数十分の無駄ですが、VBAのプロフェッショナルと一緒に最初だけでもペアプロが出来たら回避出来る問題だと思いました。

しかしながら、ペアプロやモブプロの実践は中々認められない訳で、完全縦割り個別主義を貫かなくてはいけない現場もサラリーマン故のしばりですね。

従って、所属部署にプロフェッショナルが居ない場合は助けを求める所がないので無駄に時間を潰してでも自力の調査が必要と。

最近はググれば大抵の事は解決するのでそれほど時間の無駄を作ることもないので助かりますが。

それでも個人主義の限界を感じてはいます。

チームで仕事をしたい・・・(涙)

そんな訳で、普段やらないことをやる時には思い込みを極力除いて挑みましょうという教訓でした。