PR

【VBA】デバッグを行う方法

VBA

サンプルプログラムを使ってデバッグを行う方法を紹介します。

サンプルプログラム

Option Explicit

Sub DebugSample()
    Dim users As Variant

    users = Range("A2:A11").Value

    Dim l As Long
    For l = 1 To UBound(users)
        DisplayGreeting (users(l, 1))
    Next l
End Sub

Sub DisplayGreeting(ByVal user As String)
    MsgBox ("Hello, " & user & " !")
End Sub

セルから名前を取得し、”Hello, [名前] !” と表示するプログラムです

1行目:変数の宣言を強制
3行目:DebugSampleという名前で関数を宣言
4行目:usersという名前でバリアント(Variant)の変数を用意
6行目:usersにA2からA11までのセルの値を格納
8行目:lという名前で数値(Long)のループ用変数を用意
9行目:For文の始まり
(lは1から始まり、usersの長さ分ループを行う)
10行目:DisplayGreeting関数を呼び出す
(引数としてusersのl番目の値を渡す)
11行目:lのカウントアップ
12行目:関数の終わり

14行目:DisplayGreetingという名前で関数を宣言
(引数として文字列(String)の値を受け取り、変数userに格納)
15行目:MsgBoxの表示
16行目:関数の終わり

デバッグの始め方

  1. 「▶」を選択します
  2. 実行したいマクロを選択し、「ステップイン」を選択します
  3. 現在実行中の行が黄色背景で表示され、デバッグの始まりです

デバッグの進め方

  1. デバッグ中の状態から「F8」もしくは「Shift + F8」を押すことで
    1行分処理を進めることができます

    ↓[F8]

    ※4行目は変数宣言のため飛ばされます
  2. 10行目のDisplayGreetingのところまで処理を進めてください
    ここで「F8」を押すことで、関数の中にまで進むことができます

    ↓[F8]
  3. 関数のコードをすべて実行するか、
    「Ctrl + Shift + F8」を押すことで関数内のデバッグから抜けることができます

    ↓「Ctrl + Shift + F8」
  4. 「F8」を何度か押して、再度DisplayGreetingの行まで進めてください。
    先ほどはこの状態で「F8」を押しましたが、次は「Shift + F8」を押してください

    ↓「Shift + F8」

    「Shift + F8」を押すことで、関数内のデバッグを飛ばすことができました。

ここで出てきた「F8」「Shift + F8」がデバッグを進める基本的な操作になります。

また、これまでの操作には名前がついています

F8:ステップイン
Shift + F8:ステップオーバー
Ctrl + Shift + F8:ステップアウト

他のエディターなどでも、ショートカットは違えど名前を同じだと思うので
参考に覚えておくとよいでしょう

デバッグの進め方(ブレークポイント)

今回は処理が少ないのでいいですが、
確認したい行まで「F8」で処理を進めるのは大変ですよね

そういう時はブレークポイントを張ってみましょう

  1. コードの左側の列をクリックしてブレークポイントを張ることができます
    (以下画像の赤い丸があるところ)
  2. この状態で「▶」を選択、「実行」を押します
  3. すると、処理が通ったタイミングでブレークポイントのある位置に止まります

確認したいコード行を簡単にデバッグすることができるので覚えておきましょう

変数の中身を確認する方法

6行目の処理を通った後、
usersにはどんなデータが入っているのか、ちゃんとデータが入っているのか気になりますよね
そういう時にはウォッチウィンドウが使えます

  1. usersにカーソルを置き、右クリック
  2. 「ウォッチ式の追加」を選択します
  3. 「式」に users が入っていることを確認し「OK」を押します
  4. ウォッチウィンドウが表示されます
  5. 表示されたことを確認したらデバッグモードに移ってみましょう

    usersをまだ通っていないため、値にEmpty値と表示されています
  6. 「F8」で処理を進めます

    usersを宣言しましたが、まだ値が入っていないのでEmpty値の表示のままです
  7. 「F8」で処理を進めます

    usersに値が入ったので、ウォッチウィンドウの値と型の表記が変わりました
  8. ウォッチウィンドウの「+」を押してusersの中身を確認してみましょう

    Excelのセルの通り、10人分の名前が取得できていることを確認できました

コードが意図した動作にならないとき、デバッグを活用して解決していきましょう

タイトルとURLをコピーしました