3. 論理エラー
エラー処理1では、エラーの種類は大きく分けて3つあると書きました。そこで構文エラー、実行時エラーの処理について説明しました。今回は論理エラーについて説明します。
論理エラーは、自分が作成したプログラムが期待されている結果が得られなかったときや、プログラムそのものは正常に動作しているものの、結果として自分の意図したものと異なる動作が行われた場合などです。
しかし、どの場所で間違いが発生したのか見つけ出すのが至難の業です。そこで地道にエラー箇所を見つけて修正する以外に対処する方法はありません。
エラー箇所を見つける武器
そこで出てくるのが強力な武器である「Debug.Print」ステートメントです。このステートメントは、イミディエイトウィンドウに途中結果やオブジェクト情報などを表示する命令です。この文をプログラムの必要な箇所に記入して、変数やプロパティの値を確認していき一歩一歩間違いの箇所へたどりついていきます。
利用方法(Subプロシジャ)
では「Debug.Print」ステートメントの利用方法を学びましょう。以下の3行のプログラムを標準モジュールシートに書いてみましょう。
- Sub サンプル05()
- Debug.print “今日はよい天気です。”
- End Sub
実行結果はイミディエイト画面に、表示されます。Subプロシジャーを実行するには、F5 キーです。
イミディエイトウィンドウに「今日はよい天気です。」が表示されますが、スクリーンリーダーの音声は出ません。カーソルが表示位置の1行下に行ってしまうため、上方向 キーで表示行に移ると結果が音声で読み上げられます。
では例題です。これは非常にわかりやすい問題ですがなれるために、このコードを標準モジュールシートに書いて実行してみてください。
メッセージボックスには「答えは55です。」と表示され、読み上げます。
- Sub サンプル06()
- Dim i as Integer
- Dim s as Integer '1から10までの合計の結果が入る器
- s = 0
- For i = 1 to 10
- s = s + i
- Debug.Print i,s '変数i,sの値を表示
- Next i
- MsgBox "合計は" & s & "です。"
- End Sub
サンプル06プログラムの説明
1から10までの合計を求めるプログラムです。
- 変数iは整数が入る器です。
- 変数sは整数が入る器です。
- For文はiを1から10に変えながら、s=s+iを実行します。
簡単ですがこれで論理エラーの解決対処説明を終わります。ケースバイケースで何千、何万とおりの対処方法がありますので、プログラミング経験を積んでいくことが肝要です。
私の経験では、プログラム初心者は「急がば回れ」といわれるように、1行1行「Debug.Print」ステートメントを挿入していき、途中結果(変数の値)を表示・確認していき、間違い箇所を見つけていくのが最善の道だと思います。
少し横道に!!イミディエイト画面の利用(電卓など)
イミディエイト(immediate)とは、「即座の、目前の、すぐの」という意味です。
イミディエイトが持つ機能は何もプロシジャ(関数)の結果を得るだけではありません。
イミディエイト画面に直接数式を記述することもできます。電卓代わりにもなります。
- >
- ?100 + 200
この結果は、下記のようになります。
計算式の下の行に計算結果(300)が表示されます。
【コード】 変数aに10,変数bに20を代入して、aとbを足して表示します。
- A=10
- B=20
- ?a+b
(注) ?は表示コマンドで、イミディエイトウィンドウにその結果を表示します。
【ワンポイント】 実行する前にイミディエトウィンドウの全内容をクリアしておきます。前回までの実行結果が残っている可能性があり、そのため混乱の元になります。
Ctrl + A キーを押してすべて選択して、Delete キーですべて削除します。
便利メモ
自動メンバ表示と同じような機能で入力候補表示があります。
Ctrl + Space キーで候補一覧が表示されます。
【重要】 万一プログラムの不具合などでパソコンがフリーズした場合などを考えて、入力したプログラムを失わないためにも、F5 キー(実行)を押す前にコードの保存をしておきましょう。
(保存のショートカットキー: Ctrl + S キー)