InputBoxでデバッグする

InputBoxを使うと、プログラムを途中で止めて、変数の値を調べたり、別の値を入力することができる。この機能を使えば、プログラムが予想通り動作しないときに、原因を調べるために利用することができる。

たとえば以下のプログラムを実行してみる。

プログラムの例
    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
        Dim x
        x = TextBox1.Text + TextBox2.Text
        x = x + 100
        Label1.Text = x
    End Sub

実行結果は以下のようになる。

もちろん、注意深い人はどうしてこのようになったかわかったと思う。仮にどうしてこうなるのかよくわからなかったとしよう。

その場合、プログラムに1行追加して、以下のようにすると、どうしてこのような結果になるかがわかる。

プログラムの例

    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
        Dim x
        x = TextBox1.Text + TextBox2.Text
        x = InputBox("x の値",,x)
        x = x + 100
        Label1.Text = x
    End Sub

すると、先ほどと同じようにプログラムを実行したときに以下のような新しいウインドウがあらわれる。

ここで、このままOkをクリックすると、先と同じような画面が表示される。

再度Button1をクリックして、同じように入力窓を表示させ、1001を正しい値101に変更すると、期待した結果、201が得られる。

 

しかしxの値をよく見てみると、1001になっている。100+1を計算したはずなのに。

実は、TextBoxに数字を入力した場合、それをそのまま+記号を使った計算に用いると、数値ではなく「文字」として扱われる。100+1は"100"と"1"を「連結」するという処理が行われ、結果は 101ではなく "1001"という文字列になる。

これで原因がわかった。修正するには、以前学んだようにValを使えばよい。

x = Val(TextBox1.Text) + Val(TextBox2.Text)

と修正して再度実行すれば、正しい結果が得られる。

さて、このようにInputBoxが使えることがわかったが、その詳しい使い方を確認しておく。

このウインドウは、

x = InputBox("xの値" ,,x)

という行によって表示されている。このとき括弧の中の3番目の変数としてxと書いてあるので、入力欄の初期値は x になる。このままOkをクリックすれば、この値がそのままxに代入されるので、けっきょくこの行では何もしなかったのと同じことになる。新しい値を入力すれば、xの値がその値に置き換わる。

まとめ

プログラムの動作がおかしい場合、たとえばプログラム実行中のある場所で変数xの値を確認するためにはInputBoxを以下のように使えばよい。

x = InputBox("xの値",,x)

すると、プログラムのその部分でxの値をいったん確認し、もしおかしな値であれば修正して、続きを続行することができる。