Developer

【ExcelVBA】イミディエイトウィンドウ1
2021.01.31
Lv1

【ExcelVBA】イミディエイトウィンドウ1

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

イミディエイトウィンドウはVBE(Visual Basic Editor)に追加することができるウィンドウの1つで、任意のプログラムを実行したり変数やプロパティの値、メソッドの戻り値を確認することができます。前回に紹介したプログラムを一時停止したときにも使用することができ、デバッグを効率的に行うために非常に強力な機能です。
表示するには、VBE(Visual Basic Editor)の「表示」メニュー→「イミディエイトウィンドウ」を実行します。

[014-【ExcelVBA】イミディエイトウィンドウ1-001.png]

イミディエイトウィンドウはVBEの中にこのように表示されます。
場所はドラッグ&ドロップで好きな場所に移動させることができます。(別のウィンドウにすることもできます。)大きさも変えることができますので、ディスプレイの大きさに合わせて使いやすいサイズに変更しておきましょう。

[014-【ExcelVBA】イミディエイトウィンドウ1-002.png]

イミディエイトウィンドウの使い方は3つです。
・任意のプログラムを実行する
・変数やプロパティの値、メソッドの戻り値を確認する
・任意のデータを出力する

1つずつ見ていきましょう。

イミディエイトウィンドウでプログラムを実行する

では、次のプログラムを「イミディエイトウィンドウ」に入力し、最後に「Enter」キーを入力してください。

Cells(1, 1) = "イミディエイトウィンドウのテスト"
[014-【ExcelVBA】イミディエイトウィンドウ1-003.png]

このプログラムはセルA1に「イミディエイトウィンドウのテスト」という文字を表示するというプログラムです。シートを確認すると、値が表示されていることが確認できるかと思います。

[014-【ExcelVBA】イミディエイトウィンドウ1-004.png]

このようにプログラムの一部を切り取って「試しに」実行することができます。1行だけでなく、何行でも連続して次々に実行することもできます。
筆者がよく使用するのは、
・初めて使うメソッドや関数などで使用方法が不明瞭なときに、確認のために試しに実行してみる。
・エラーになったときに、その該当部分をイミディエイトウィンドウで再度実行してエラー内容を確認する。
・エラーを修正するときに、その修正が「本当に正しいか」修正によって「エラーが発生しなくなるか」を確認する。

注意点としては、イミディエイトウィンドウに入力した命令文は自動変換が行われないということです。
たとえば、上記の例では、「cells」の部分などに該当します。VBEでは全て小文字で入力しても自動的に「Cells」と頭文字が大文字に変換されますが、イミディエイトウィンドウでは小文字のままです。イミディエイトウィンドウではこのように小文字のままでも動作しますので、いちいち大文字で入力する必要はありません。

イミディエイトウィンドウで値を確認する

次に、イミディエイトウィンドウで変数やプロパティの値、メソッドの戻り値を確認するときには命令の先頭に「?」を付けます。最後に「Enter」キーを入力するのを忘れないようにしましょう。

?Worksheets(1).name

「Enter」キーを入力すると、命令文の次の行に実行結果の値が表示されます。

[014-【ExcelVBA】イミディエイトウィンドウ1-005.png]

たとえば、このような使い方も可能です。
1行目で計算を行い、その結果を「x」という変数に代入しています。2行目でその変数「x」の中身を表示しています。

x = 365 * 24
?x
[014-【ExcelVBA】イミディエイトウィンドウ1-006.png]

この機能は、プログラムの一時停止中にも実行することができます。
筆者としては特にこの機能が強力だと考えます。筆者はいくつかのプログラム言語や開発環境に触れてきましたが、一時停止中にこのように柔軟にデバッグができるものは多くありません。(もちろん、あらかじめデバッグ用のプログラムを作成しておけば似たようなことができます。あらかじめ準備しなくてもできるところが特に使いやすく強力だと思います。)

では、「For…Nextステートメント3」のメール一斉送信プログラムを使って確認してみましょう。

Sub VBA基礎第14回_1()
    Dim objOutlook As Object
    Dim objMail As Object
     
    Set objOutlook = CreateObject("Outlook.Application")
     
    Dim i As Integer
    For i = 2 To 4
        Set objMail = objOutlook.CreateItem(0)
     
        objMail.To = Cells(i, 2).Value
        objMail.Subject = "テストメール"
        objMail.Body = "メール本文"
        objMail.Send
         
        Set objMail = Nothing
    Next
 
    Set objOutlook = Nothing
    MsgBox "送信完了", vbInformation
End Sub

ブレークポイントを設定します。今回は14行目で設定しましょう。
プログラムを実行し、14行目で一時停止したことを確認してください。

[014-【ExcelVBA】イミディエイトウィンドウ1-007.png]

この状態でイミディエイトウィンドウに次のプログラムを入力してみてください。

?objMail.To
[014-【ExcelVBA】イミディエイトウィンドウ1-008.png]

このようにプログラムを一時停止して、その時点の値を確認することができます。
バグやエラーの発生原因には様々なパターンがありますが、その中でも特によく発生する理由の1つが「変数やプロパティに保持されている値が、プログラマーの想定外の値となっていた」というパターンです。プログラム実行中には変数の値が逐次変化していくことが常です。この変化がプログラマーの意図しない値になってしまうことがよくあります。
そのため、このイミディエイトウィンドウをデバッグの際にうまく使っていくことでバグやエラーの修正がとても効率よく行うことができます。

まとめ

今回はイミディエイトウィンドウについて紹介しました。
イミディエイトウィンドウの使い方は3つあり、プログラムを一時停止中にも使用することができます。
これらのテクニックも非常に有用でよく使うものになりますので、実際に動作を見ながら行ってみてください。

確認問題

以下の「○○○」に当てはまる文言を解答してください。

イミディエイトウィンドウの使い方は3つある
・任意の○○○を実行する
・○○○やプロパティの値、メソッドの○○○を確認する
・任意のデータを出力する
これらの機能はプログラムの○○○中にも使用することができる。

答え

イミディエイトウィンドウの使い方は3つある
・任意のプログラムを実行する
変数やプロパティの値、メソッドの戻り値を確認する
・任意のデータを出力する
これらの機能はプログラムの一時停止中にも使用することができる。

次回も引き続き、イミディエイトウィンドウです。

 
 

連載目次リンク

ExcelVBA 入門 連載目次