コメントとデバッグ

かばくん

エラーがたくさん出て、進みません(泣)
どこが間違ってるかわかりません・・・。

へびせんせい

プログラミングをしていると、必ずエラーには遭遇します。
エラーを見つけるのもプログラミング技術の一つ。
効率よくエラーを解消する方法を教えます!

コメントについて

プログラミングにおけるコメントとは、

プログラムの動作にまったく影響しない、メモ書きや処理の説明のこと

使う用途としては、主に次の2つがあります。

  1. 処理の内容や説明を書いておき、メモ書きとして使う
  2. プログラムの動作を確認するために、一部のコードを動かないようにする

VBAでのコメントの使い方

直接コードを入力する方法

コメントを表すにはコード中にシングルクォーテーション ' を入力します。
1キーで入力できますが、複数行をコメントしようとすると少し手間がかかります。

' これはコメントです!

コメントブロックを使う方法

VBEにあるコメントブロックアイコンを使って選択行を一括してコメントにできます。
おそらく、初期状態だと、コメントブロックは表示されていないので、まずは設定でコメントブロックアイコンを表示させます。

  1. 表示 → ツールバー → 編集 にチェック
  2. コメントブロックを表示する方法
  3. 編集ツールバーの中にアイコンがある
  4. コメントブロックを表示する方法
  5. ツールバーはドラッグして、メニュー内に配置できる
  6. コメントブロックを表示する方法
コメントしたい行を選択した後で、コメントブロックアイコンを押すことで一括してコメントにできます
また、隣の非コメントブロックアイコンを押すことでコメントを解除できます

コメントはたくさん使ったほうがよい

良いコードはコメントも豊富です。
他の人が見てもわかりやすくすることができますし、なにより自分で振り返ったときに役に立つことが多いです。
プログラムは後から軽微な修正をすることが意外と多いです。そのときに、自分のコードでも「???」とならないように、コメントを残す癖をつけましょう。

サンプルコード

Sub 今日の日付()
  '今日の日付をA1セルに入力するマクロ'
  
  'まずClearメソッドですべてのセルの値を消去する'
  Cells.Clear
  
  'A1セルにDate関数で今日の日付を入力する'
  Range("A1").Value = Date
End Sub

*都合により、コメントの末尾にも ' を付けていますが、不要です

デバッグについて

デバッグとは、プログラムのエラーを見つけて正しく修正することです。

デバッグ(debug)・・・バグ(プログラムのエラーのこと)を取り除く、という意味

バグを取り除く手段はいろいろありますが、よく使われる方法を紹介します。

  1. コメントアウトを使う
  2. ブレークポイントを使う
  3. ステップインを使う
  4. ローカルウィンドウを使う

次のサンプルコードはエラーが存在し、正しく動作しないマクロです。

Sub debug_sumple()
  Dim msg As String
  Dim num As Long
  
  msg = "Hello"
  num = "World"
  
  Range("A1").Value = msg & num
End Sub

コメントアウトを使う

コメントを使って、エラーがありそうな箇所をコメントにして、マクロを実行させながらエラーを探す方法です。

上のサンプルコードのエラーの一つは、整数型の変数numに"World"という文字列を代入しているところです。
試しに、この行をコメントアウトして、実行するとどうでしょうか。
エラーが解消され、この行にエラーが存在することがわかります。

ブレークポイントを使う

比較的、コードが長くなってくると、コメントアウトを付けるのも大変になってきます。
そのようなときは、ブレークポイントを使うと良いでしょう。

ブレークポイント ・・・ ある点の直前までしかプログラムを実行させないように制御すること

ブレークポイントの使い方

  1. プログラムを止めたい箇所の左側をクリックする
  2. ブレークポイントの設定方法
  3. マクロを実行する(F5)
  4. その行の直前まで動作し、止まる
  5. もう一度、マクロを実行すると、ブレークポイント以降が動作する

エラーが表示されたタイミングにより、ブレークポイント以前か以降かでエラーの場所を推測することができます。
また、プログラムを途中で止めることで、途中の変数の中身を見ることも可能です。(詳細は次のローカルウィンドウで)

ステップインを使う

より細かく動作を確認するときはステップインという機能を使うと良いでしょう。

ステップイン ・・・ プログラムを1行ずつ実行すること

ステップインの使い方

  1. デバッグ → ステップイン をクリック(F8)
  2. ステップインの使い方
  3. 1行だけ実行される(最初はマクロ名が点灯)
  4. F8キーを押し、ステップインを繰り返す
  5. エラーがある行で、プログラムが止まる

この機能はブレークポイントと組み合わせることができるので、おおまかにブレークポイントを設定し、細かくステップインを使っていくと、効率的にエラーを見つけることができます。

ローカルウィンドウを使う

エラーは出ずにプログラムは動作するのだけど、計算結果等が思い通りにならないときがあります。
そういうとき、プログラム中の変数の中身を見ることで、どこの計算が間違っているかを調べる方法をとります。
このとき使われるのがローカルウィンドウというものです。

ローカルウィンドウ ・・・ 変数やオブジェクトの中身を見ることができる

ローカルウインドウの使い方

  1. 表示 → ローカルウインドウ をクリック
  2. ローカルウインドウの使い方
  3. 画面の下側にローカルウインドウが表示される
  4. マクロを実行し(F5)、エラーがでたらデバッグ をクリック
  5. エラー時の変数の中身がウォッチウィンドウに表示される
  6. ローカルウインドウで変数の中身を見る

    変数numの値が0になっているので、おかしいことに気づくことができる
    ローカルウインドウもブレークポイントやステップインと組み合わせて使うことができます。


コメント・デバッグについて

へびせんせい

エラーを見つけることは重要ですが、あまり時間をかけすぎても非効率的なのは事実。
ときには第三者の目を借りた方が早く解決することもよくあります。
*練習問題はありません