【Excel VBA】 ステップ実行 (コードのデバッグと便利な機能)

Excel 小技集小技集

エクセル VBA 3回目です。
コードを編集する方法がわかったので、編集したコードの動きを確認します。
使う機能はデバッグメニューの中にあるステップ実行です。
デバッグとはプログラム上の間違いや不具合を修正する作業のことを言います。
前回までの記事は以下を参照。
※ Excel のバージョンは 2021 を使用しています

ステップ実行とは

ステップ実行は入力されたコードをひとつずつ動かす機能です。
ひとつずつ動かすことで、どこで何が変わったかを確認することができます。
想定通りの動きをしていない場合などは、この機能を使って原因特定したりします。
↓ こんな画面 (下の画像は「マクロの使い方・作り方」で使った画像です)

ステップ実行画面

準備

まずはステップ実行を試すため、簡単なコードを作成します。
新規でマクロを作成して、以下のコードを入力してください。
新規マクロの作成はマクロ画面にマクロ名を入れて「作成」ボタンをクリック。
※ 前回までに作成したマクロでも問題ありません。

マクロ新規作成

Sub ステップ実行()

    Range("B2").Value = "あいう"
    Range("B3").Value = "カキク"

    ' 文字を入れる箱 (hako) を用意
    Dim hako As String

    hako = Range("B2").Value
    hako = hako + Range("B3").Value

    Range("B4").Value = hako

End Sub

何となくわかるかもしれませんが、以下の順番で動きます。

  1. B2 セルに “あいう” を書き込む
  2. B3 セルに “カキク” を書き込む
  3. hako という変数 (※下記参照) に B2 セルの値を入れる
  4. hako に hako と B3 セルの値をつなげて入れる
  5. B4 セルに hako の値を入れる

ポイント
変数とは、プログラミングや数学で使う 「値を入れておく箱」のようなものです。
hako という名前にしましたが、aaa でも data でも構いません。
何に使用するかわかりやすい名前にすることが推奨されます。
以下の記述で、「●● という名前の変数を使います」という宣言になります。

Dim ●● As String

String は文字列という意味で、VBA で決められた形式を意味しています。
他にも Integer (整数値)、とか Boolean (真偽値) などいろいろあります。


実行方法

ステップ実行は、キーボード操作とマウス操作のどちらでも可能です。
慣れてくるとキーボード操作のほうが簡単ですが、どちらでも使いやすいほうで問題ありません。
一番簡単な実行方法は、マクロ画面から「ステップ イン」ボタンをクリック。
※ コード編集画面の実行したいマクロ内にカーソルを移動して F8 ボタンクリックでも可

ステップイン (マクロ画面)

 ↓ コード編集画面に黄色ラインの行が表示されればステップ実行の始まりです

ステップイン後 (開始直後)

ステップイン (F8 ボタン)

ステップ実行が開始されたら、上部メニューのデバッグからステップインをクリックするか、F8 ボタンをクリックすることで処理をひとつ進めることができます。
毎回メニューから選択するのは大変なので、F8 ボタンで進めると楽です。

ステップイン (メニュー)

 ↓ 次のステップに進みます

ステップイン後 (2ステップ目)

ポイント
以前の記事にも書きましたが、黄色ラインのコードはこれから実行されるコードでまだ実行されていません。

ステップイン後 (2ステップ目結果)

さらに次のステップに進めると、実際にセルの値が変わることが確認できます。
次のステップに進める方法は、「デバッグメニューからステップイン」もしくは「F8 キークリック」です。
↓ ステップをひとつ進めたあと

ステップイン後 (3ステップ目)

黄色い線が移動した後には、エクセルシートの値も変わっています。

ステップイン後 (3ステップ目結果)

ステップイン実行の終了

黄色い線を最後 (End Sub となっているところ) まで進めるとひとつの処理が終了となります。
Sub とは処理のをまとめたもので、処理の途中からべつの Sub を呼び出すこともできます。
※ Sub のほかに、Function というのもあります。(Sub と Function の違いはまた別のときに)
処理終わり、次の処理がなくなると黄色い線がなくなります。

ステップイン実行の終了 (End Sub)
ステップイン実行の終了 (End Sub 後)

エクセルのシートにもすべて反映されています。

ステップイン実行の終了 (End Sub 後の結果)

途中でやめる場合

ステップ実行を途中でやめる場合は、以下の方法で終わらせることができます。
実行したところまでで強制的に終了するか、最後まで実行するかのどちらかを選べます。

リセット

現在中断されているところで処理を終了します。
メニュー内の「■ (停止) ボタンクリック」、または「実行メニュー → リセット」でステップ実行を終了します。
黄色い線が消え、中断したところで処理が終了します。

実行メニュー → リセット

 ↓ 実行結果

リセット結果

ステップ実行したところまでで処理が終了するので、実行されなかった処理は無視されます。

Sub/ユーザーフォームの実行 (F5 ボタン)

すべての処理を実行させて終了する方法です。
メニュー内の「▶ (再生) マーククリック」、または「実行メニュー → Sub/ユーザーフォームの実行」、または「F5 キークリック」でステップ実行を終了できます。
黄色い線が消え、処理が最後まで実行されます。

実行メニュー → 実行

 ↓ 実行結果

実行結果


便利な機能

ステップ実行中やコード編集中に便利な機能があるので紹介します。
便利な機能を使うことで VBA の理解が深まります。

Data Tips (データヒント)

ステップ実行中にマウスカーソルを当てると、当てた項目の現在の値がポップアップで表示されます。
この機能の名称は Data Tips (データヒント) と呼ばれるようです。名称知りませんでした……。
以下は、B3 セルの値を確認しています。

データヒント Empty 値

 ↓ 処理を進めてみると、値が変わったことが確認できます。

データヒント 代入後

実際のセルの値も変わっています。

セルを確認

変数の値も確認可能

セルの値以外にも、プログラムの中で使われている変数や、定数と呼ばれる VBA 内で定義された固定値の中身も見れます。

変数の確認

初めは何も格納されていない状態

変数の確認 初期値

 ↓ B2 セルの値が格納される

変数の確認 B2 セルの値を格納

 ↓ 現在の値に B3 セルの値を後ろに追加

変数の確認 B3 セルの値を追加

hako の中身が あいうカキク になりました。

定数の確認

以下は、VBA で定義されている xlSolid という定数。
なんだかよくわからないので確認してみると、1 という数字が入っていることがわかります。
※ 定数はプログラム上で変更することはできません。
.pattern = 1 と書いても同じ結果になります。

定数の確認

イミディエイトウィンドウ

イミディエイトウィンドウは、変数の値を確認したり、コードを一時的に実行したり、デバッグ情報を出力したりできるウィンドウです。
イミディエイト (Immediate) とは、「即時」とか「すぐに」 という意味で、すくに実行して確認できるウィンドウということのようです。
イミディエイトウィンドウはステップ実行中ではなくても実行可能です。

表示方法

上部メニューの「表示 → イミディエイトウィンドウ」または、「Ctrl + G ボタン」で表示できます。

表示メニュー → イミディエイトウィンドウ

以下が表示されたイミディエイトウィンドウ

イミディエイトウィンドウ

使い方

使い方は、イミディエイトウィンドウ内に実行したいコードを入力して Enter ボタンをクリックするだけ。
入力したコードが即座に実行できます。

値の確認

確認したい項目の先頭に ? マークを追加して実行すると、項目に設定されている値を確認できます。
以下は、B2 セルの値を確認する方法

?Range("B2").Value
値の確認 実行前

 ↓ Enter ボタンクリック後

値の確認 実行後

コード実行

コードの一部を入力してそのまま実行することができます。
ステップ実行中に以下のコードを実行してみます。
※ ステップ実行中ではなくても実行は可能です。

Range("C2").Value = "えお"

ステップ実行中 (コード実行前)

コード実行
コード実行 実行前

 ↓ イミディエイトウィンドウでコードを実行

コード実行 実行後

ステップ実行中のコードに書かれていないことを実行できます。


その他にも、「値の確認」と組み合わせて計算式を実行することもできます。

?100+5
計算式の実行

プログラムから値の出力

コードに Debug.Print と記載することで、実行中の情報をイミディエイトウィンドウに出力することができます。
短い処理であればあんまり使用しませんが、長い処理の場合に有効なので覚えておきましょう。

Debug.Print hako
Debug.Print 実行前

 ↓ Debug.Print が実行されるとイミディエイトウィンドウに出力されます。

Debug.Print 実行後

まとめ

ステップ実行の方法と、便利機能でした。
ステップ実行を覚えるとプログラムの間違っているところを発見しやすくなります。
上級者もトラブル対応やプログラム検証に使用するので、是非覚えておきましょう。