ExcelとAccessの学習サイトです

ExcelVBA独学の壁はデバッグ機能が解決してくれます

こんにちは。システム担当の父親、KATSUです。

Excel歴20年、Access歴10年ですが、ブログは50記事を書いた程度です。

先日、「パーフェクトExcel VBA」という書籍を購入しました。今まで約10年間VBAを使ってきましたが、これまでおざなりにしてきた基本を見つめ直そうと考えています。


「Excel VBAをどのように学習したらいいのかな?」

「ネットで検索するとプログラムコードが載っているけど、どのように使ったらいいのかな?」

「分岐や繰り返しの動きを知りたいけど、作動させたら一瞬で済んでしまうので細かい動きが分からない。」

今回は、VBAに挑戦してみたけど、途中で挫折してしまった人に向けて書いてみました。

この記事を書いている私は、約20年前に就職しでから社内でExcelを使い続けてきました。
VBAを使ったプログラミングに挑戦したこともあったのですが、動作が分からずに挫折してしまいました。

しかし、10年前のある日にデバッグを知り、プログラムの動作を順番に追えることが分かりました。

それからは、プログラムコードを自分で書けるようになり、一気にVBAのスキルが伸びました

その時に気づいたデバッグをメインに、Excel VBAを独学するためのコツを紹介していきます

Excel VBAを独学するためには

プログラミング全般に言えることですが、インターネットを通しての独学が基本的に可能です。
ExcelVBAについては、特に解説サイトや技術的なブログも豊富にありますので、自分に合ったサイトを活用するとよいでしょう。

目的の処理を行うためのコードが公開されていますので、個人的に使用する場合はそのままコピーして活用しても問題ありません。
コードを活用する時に注意すべきところが2点あります。

  • 正しく動作する保証がない
  • 解説サイトのコードを自分のサイトにそのまま転用・掲載するのは厳禁

公開されているコードは、環境が変わると正しく動作されない可能性があるということです。OfficeやExcelのバージョンが変わるとエラーでプログラムが進まないこともあります。

逆に、公開されているコードを自分の環境に合うように修正することが、VBA入門者のスキル習得につながります。

そして、言うまでもなく他人が公開しているコードを自分のサイトにそのまま公開するのは、悪意のある犯罪になりますので慎みましょう

デバッグでプログラムの動きをしっかり把握する

先にも述べた通り、インターネットに公開されているコードをVBEのエディターに打ち込み直すか、貼り付けることでそのままプログラムを作動させることが出来ます。

まずは「開発」タブの「Visual Basic」をクリックし、VBEを起動させてください。

オブジェクトウインドウに表示されているExcelブックを右クリックし、標準モジュールを作成します。

VBAエディターが表示されますが、ここにコードを入力します。

下のコードをそのままVBAエディターに貼り付けてみてください。

Sub ForTest()
  Dim i As Integer
  For i = 1 To 10
    If  i = 10 Then
        Exit For
    End If
  Next i
  MsgBox (i & "回繰り返しました")
End Sub

ツールバーの実行ボタンを押すとプログラムが作動します。F5キーを押してもいいです。

プログラムが終了すると、メッセージボックスが表示されます。

正しく動作しますが、一瞬で処理が終了してしまうので、どのような動きをしているのか目で見ても分かりません

次にこちらのコードを実行してみてください。エラーを意図的に発生させるために数値の「10」を文字列の「じゅう」に変えています。

Sub ForTest()
  Dim i As Integer
  For i = 1 To 10
    If  i = “じゅう” Then
        Exit For
    End If
  Next i
  MsgBox (i & "回繰り返しました")
End Sub

エラーが発生してこのような警告が表示されます。

デバッグをクリックすると、エラーが発生した文が黄色いマーカーで色付けられます

色づけられた部分でプログラムが止まった状態です。

通常はエラーを修正して、起動させるとそのまま処理を続けます。

エラーが解消されないと先に進むことができません。

このプログラムが止まる仕組みを使って動きを細かく確認することが出来ます。

プログラムの動きを知るために役に立つのがデバッグ機能です。

デバッグとは、一般的に「プログラムの不具合を修正して正しく動作させる」ための一連の作業のことを差します。

デバッグを行うことで、以下のようなことができます。

  • コードを1行ずつ順番に追える
  • 変数やデータなどの値を記録に残すことが出来る

分岐や繰り返しはコードを順番に追う

VBAプログラミングを行うときに、必ずと言ってよいほど、「条件分岐」や「繰り返し」を活用することになります。

処理が流れるだけの「順次処理」のみであれば、エラーが発生した時でも停止した場所が原因であることが分かります

  • ブレークポイントでプログラム停止
  • ステップインで1行ずつプログラムを実行

ブレークポイントでプログラム停止

VBEエディタの左端をクリックすると、ブレークポイントが設定されます。

ブレークポイントは赤丸になっています。

プログラムを実行してみると、ブレークポイントで静止しているのを確認できました。

ステップインで1行ずつプログラムを実行

ブレークポイントで静止していることを確認できたら次はステップインを使って1行ずつプログラムを実行していきます。

F8キーを押すと、黄色いマーカーが一行ずつ送られます。

一行ずつ送られることで、どのような動きをしているかがよく分かります。

「デバッグ」というツールバーを表示させると、「ステップイン」ボタンでも同じ動作を再現することができます。「ステップアウト」や「ステップオーバー」という動作もありますが、中級者以上になってから覚えても全然問題なしです。

様々なデータを動作の途中で表示させる

イミディエイトゥウィンドウで変数などのデータを表示できます。

コードの途中でdebug.printの後に、変数やセルのアドレス、計算式を入れると、現在の値を表示してくれます。

ここで、Forの開始直後に「debug.print i」という文を挿入します。

Sub ForTest()
  Dim i As Integer
  For i = 1 To 10
    debug.print i
    If  i = 10 Then
        Exit For
    End If
  Next i
  MsgBox (i & "回繰り返しました")
End Sub

繰り返し作業を行う時の変数 i が何を表示しているか確認することが出来ます。

実行すると、イミディエイトウインドウに数字が順番に表示されていることが分かります。

コードを書いてはみたものの、正しく動作するか不安な場合は、あらかじめ設置しておいても良いでしょう。

処理が完了してもイミディエイトゥウィンドウに書かれた処理は残りますので、正しく動作しているか確認する事が出来ます。

Debug.print文を使わない場合は、文の頭に「’(アポストロフィ)」を入れてコメント化しておいても良いでしょう。

必要になったら、コメント化を外せば、再び確認する事ができます。

プログラムが安定稼働して、デバッグの必要性がなくなったら削除しておきましょう。

まとめ

VBAのデバッグ機能を使えるようになると、プログラムの細かい動きが分かるようになります。

デバッグ機能は、あなたが VBAを習得する大きな助けになります

VBAを習得できれば、今まで時間をかけて行なっていた作業をワンクリックで終わらせるようになるので、時短効果は絶大です。

ある程度VBAスキルが身に付いたら、書籍を使って学習する方法も有効です。

インターネットを検索して独学する場合は、自分の知っている言葉を検索し、その情報にたどり着くことは出来ますが、知らない言葉にたどり着くことは出来ません。

書籍を使えば、知らない言葉にもたどり着いて、新しい知識を得ることが出来ます


本日も最後までありがとうございました。

  • B!