[VBA] イミディエイトウィンドウとDebug.Print

 この記事では、VBA のイミディエイトウィンドウと Debug.Print について解説します。どちらもアプリ開発になくてはならない機能なので、使い方をしっかりマスターしましょう。
 

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

 初期設定で VBE (Visual Basic Editor) を起動すると、一番下に イミディエイトウィンドウ が表示されるはずです。もしなければ、下図のようにメニューの [表示] から [イミディエイトウィンドウ] を選択します (または Ctrl + G で表示させます)。

 VBA イミディエイトウィンドウ (immediate window)

 イミディエイトウィンドウはコマンド入力画面として使用できます。
 先頭に「?」を付けて、式や関数を入力すると実行結果が表示されるので、手っ取り早く関数の挙動などを調べたいときに便利です。

 計算式を入力します:

? 5+2*10
25

 Now関数で現在の日付と時刻を表示します:

? Now()
2019/08/18 17:18:22

 LCase関数で大文字を小文字に変換します: 

? LCase("KOBATO")
kobato

 
 プログラムの途中で変数の状態がどうなっているのか知りたい場面は結構あります。イミディエイトウィンドウを使うと、メモリに保存されている値を表示させることができます。たとえば、次のようなコードを書いたとします。

'[VBA] Immediate Window Sample_1

Sub Increment_1()

 Dim x As Long, y As Long

 x = 10
 y = 20

 Stop

 x = x + 1
 y = y + 1

End Sub

 Increment_1() を実行すると、Stop ステートメントのところで処理が停止します。この段階の変数 x の値を知るには、イミディエイトウィンドウに次のように入力します。

? x
10

 比較演算子を使って、変数同士の大小関係などを調べることもできます。

? x > y
False

 プログラムの途中に Debug.Print を記述しておけば、実行途中で変数の値を出力しつつ処理を完遂します。

'[VBA] Immediate Window Sample_2

Sub Increment_B()

 Dim i As Long, x As Long

 For i = 1 To 5
  x = x + 1
  Debug.Print x;
 Next i

End Sub

1 2 3 4 5

 
 イミディエイトウィンドウからプロシージャを実行することができます。たとえば、次のようなプロシージャを作成したとします。

'[VBA] Immediate Window Sample_3

Sub Hi()

 MsgBox "Hi! My name is Kobato."

End Sub

 イミディエイトウィンドウに Hi と入力すると、メッセージボックスが表示されます。

Hi

 VBA イミディエイトウィンドウ (immediate window) 2
 

Debug.Print

 自分でマクロを作ってみて「動作を試したいな」てときに、MsgBox関数を使う方法もありますけど、実行するときにダイアログボックス画面が現れて、ちょっと煩わしくなることがありますね。そんなときは Debug.Print を使うと便利です。たとえば、

'[VBA] イミディエイトウィンドウに文字列を表示させる

Sub Display_String()

  Debug.Print "今日はいい天気ね~"

End Sub

を実行すると、VBE画面の一番下にあるイミディエイトウィンドウに

 今日はいい天気ね~

と表示されますよ。

 Debug.Printでイミディエイト画面に結果を表示

 これは Debugオブジェクト、つまりイミディエイトウィンドウに対して Print メソッドを使って「これを書きなさいね」と命じているわけです。すぐに実行結果を確認できるので、この機能は重宝します。できれば初級段階で覚えておきたい基本です。
 
 この Debug.Print は、特に For...Next などで実行する繰り返し処理を確認
するときによく使われます。たとえば次のようなコードを書いてみましょう。

'[VBA] 数字を縦に並べる

Sub Display_Numbers_1()

  Dim i As Integer

  For i = 1 To 3
    Debug.Print i
  Next i

End Sub

 自然数を 1 から 3 まで順番に表示させるというマクロです。Display_Numbers_1() を実行すると

 1
 2
 3

というように数字が縦に並んでしまいます。このマクロは数字が 3 つだからまだいいけど、10 個も 100 個も縦に並んだら見づらいことこのうえないですね。というわけで、こんなときはカウンタ変数 i の後ろにセミコロン(;)をつけてあげましょう。

'[VBA] 数字を横に並べる

Sub Display_Numbers_2()

  Dim i As Integer

  For i = 1 To 3
    Debug.Print i;
  Next i

End Sub

 Display_Numbers_2 を実行すると

 1 2 3

というように改行せずに横並びに表示してくれますよ。他には i の後ろにカンマ(,)をつけるという手もあります。

'[VBA] 数字を横に並べる(間にタブを入れる)

Sub Display_Numbers_3()

  Dim i As Integer

  For i = 1 To 3
    Debug.Print i,
  Next i

End Sub

 Display_Numbers_3() を実行すると

 1   2   3

というように数字の間にタブが入ります。ちょっと文字同士の間隔が空きすぎるので、こばとはあんまり好きじゃないけど、まあこのへんはお好みでどうそ。
 
 逆にちょっと長い文章だったりすると、むしろ途中で改行して表示したくなる場合もあります。Excel ではセルの中で改行するときに Alt + Enter と入力しますけど、そのときに vbLf という改行コードが挿入されます。だからマクロでも vbLf を入れてやれば改行できます。

'[VBA] イミディエイトウィンドウに改行を含む文字列を表示-1

Sub Display_New_Line_1()

  Debug.Print "こばとちゃんはかわいいな"; vbCrLf; "こばとちゃんは美人だな"

End Sub

 Display_New_Line() を実行すると

 こばとちゃんはかわいいな
 こばとちゃんは美人だな

というように表示されます。こういう難しそうなキーワード使うと格好良いけれど、次のように書いた方が他の人が読んだときにわかりやすいかもしれません。

'VBA イミディエイトウィンドウに改行を含む文字列を表示-2

Sub Display_New_Line_2()

  Debug.Print "こばとちゃんはかわいいな"
  Debug.Print "こばとちゃんは美人だな"

End Sub

 格好つけるより、シンプルに書くこともプログラミングでは大切です。
 え? それはいいけど、表示される文章が気になる? そうですか?
 「こばとちゃんはかわいい」という当たり前の事実を書いただけなんですけどね。


 

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)