デバッグデの基礎
・デバッグとは
・論理エラーと文法エラー
・イミディエイトウィンドウ
・ブレークポイント
・ステップ実行
【ここでのポイント】
デバッグそのものを問う問題だとしても、例文にVBAコードが存在する場合は、そもそもVBAの基礎そのものが問われることになります。
それらを実際のVBAにどのように当てはめて、どのようにデバッグするかを習得することが難しいものとなります。
デバッグ技術の習得は、経験を積む事でしか得ることが出来ないものです。
従って、少なくともベーシックでは難しいデバッグ技術については出題されないと思われます。
デバッグで使う各機能についての習得を問う問題くらいではないかと推測しています。
つまり、練習問題にあるような、単純な説明文での正否を問うくらいではないかと思っています。
実際にやりながら一つずつ確実に習得していってください。
デバッグとは
エラーでプログラムが停止してしまう場合もあれば、
プログラムは正常実行されたが、結果が仕様と食い違っている場合もあります。
結果の仕様との相違は、そもそも仕様がどうなっているかの精査が必要になります。
VBAコードを書いて、一発で思い通りの結果になることは稀な事です。
費やす時間で言えば、デバッグの方が多大な時間がかかることはむしろ普通の事です。
・VBAコードを書く
・テスト実行する
・仕様通りの結果が得られるまでデバッグを行う
デバッグの基本的なステップ
・バグの原因を特定する
・バグの修正方法を考える
・コードの修正をする
・実行テストする
VBEには、「バグの原因を特定する」ために必要な機能が豊富に用意されています。
論理エラーと文法エラー
オプションの「自動構文チェック」のチェック状態により変わってきます。
エラーメッセージが表示され、当該行が赤字になります。
さらに、行内の特定単語がハイライト表示される場合もあります。
(ハイライト表示されるのは、その単語位置に間違いがあることが明白な場合のみです)
「自動構文チェック」にチェックがついていない場合
当該行が赤字になるだけです。
メッセージは、チェックがついていると時と同じものです。
論理エラー
もちろん、「test」シートがあれば正しく動作します。
この状態をデバッグモードと言います。
つまり、この黄色の行はまだ実行されていない、これから実行する行という事になります。
したがって、通常は必ず「デバッグ」をクリックして、エラー箇所を確認します。
ワークシートにValueはありませんよね。
実行時にトラップ可能なエラー番号一覧
上記の全てを覚える必要は全くありません。
以下が、どんな時に出るかを理解していれば十分です。
メッセージ | 対策 |
オーバーフローしました。 | データ型変換の結果が、その変数の許容範囲か確認 Integerに32768以上を入れている等 |
インデックスが有効範囲にありません。 | 存在しない配列要素を参照していないか確認 存在しないシートを指定している等 |
0 で除算しました。 | 0で割り算しています |
型が一致しません。 | 互換性のないデータ型の間で代入を行っています。 数値変数に文字列を入れている等 |
オブジェクトは、このプロパティまたはメソッドをサポートしていません。 | プロパティ名またはメソッド名が正しいかどうかを確認 |
以下も参考に見ておいてください。
イミディエイトウィンドウ
大きく分けると、以下の機能があります。
・プロパティや変数の中身を確認
・命令の実行
・Debug.Printの出力先
通常は、マクロ実行途中にデバッグ目的でプロパティや変数の中身を確認するために使用します。
以下の機能があることだけ知っておいてください。
・オプションで、ドッキングするかを指定できる。
・ドッキングする場合は、マウスでドッキングしたりフローティングしたりできます
イミディエイトウィンドウの使い方
その結果がウィンドウに表示されます。
・変数への代入
・関数
・ステートメント
※関数とステートメントは、使えるものとつかえない物があります。
変数への代入
そもそも、変数宣言は不必要となっています。
?i Enter
→ 10と表示されます。
i=11 Enter
?i Enter
→ 11と表示されます。
関数
msgbox i
単に文字列だけを戻す関数は実行してもエラーとなります。
例えば、left、right等々
ステートメント
?i
→6と表示されます。
上記の:は、複数ステートメントを1行に書くときの書き方になります。
Debug.Printの出力先
ブレークポイント
マクロの実行を、任意の場所で一時的に停止させることが出来ます。
・Stopステートメント
マクロはその直前まで実行され、プレークポイントの行の実行待ち状態で停止します。
上図の●の位置をクリックすることで設定できます。
既にブレークポイントが設定されている場合は解除されます。
ブレークポイントを設定する行に入力カーソルを置いて、
デバッグ → ブレークポイントの設定/解除またはF9
例えば、
Dimステートメントには、ブレークポイントは設定できません。
Stopステートメント
ステップ実行
VBAコードを1行ずつ確認しながら実行させることが出来ます。
これをステップ実行と言います。
「デバッグ」メニュー → 「ステップ イン」
ショートカットはF8
最初に、Subステートメントが黄色で停止します。
Dimステートメントは飛ばされます。
その直前までが実行され、これから黄色の行を実行するところで停止しているという事です。
なお、マウスカーソルを変数の上に合わせると、変数の値がヒント表示されます。
SubプロシージャーをCallしている場合は、
Call先のSubプロシージャーの中も1行ずつ実行されます。
Call先のプロシージャーの中は一気に実行して、元のプロシージャーの次の行で停止します。
今停止しているプロシージャー内だけは一気に実行されます。
Sub test()
Call test1
Call test2
End Sub
Sub test2()
Dim i As Long
i = 1
i = 2
End Sub
Sub test2()
Dim i As Long
i = 11
i = 12
End Sub
このようなプロシージャーを用意して、
実際に、ステップイン、ステップオーバー、ステップアウトの動作を確認してください。
ただし、VBA試験に出題される可能性は低いのではないかと思われます。
その他のデバッグ用のウィンドウ
・ローカルウィンドウ
・ウォッチウィンドウ
これらもあります。
従って、試験には出題されないと考えていますが、VBAを習得する過程として一通りは覚えておいた方が良いでしょう。
実行から中断モードに遷移したときには自動的に表示が更新されます。
ウォッチウィンドウ
VBEで、変数やプロパティ(オブジェクトも含んだ完全なオブジェクト式)を選択し、
ドラッグして、ウォッチウィンドウにドロッブすることでもウォッチ式に追加できます。
・変数
・プロパティ
・変数およびプロパティを使った式
ただし、
ローカルウィンドウではモジュールレベル変数が表示されていないので、
モジュールレベル変数を見たい場合には必要になってきます。
数個の変数や特定のプロパティを、プログラムの進行とともに監視するような場合になるでしょう。
使いこなせばとても強力な機能なので、デバッグで困った時には使えるようにはしておきましょう。
【業務改善の実務】
実務では非常に重要であり、デバッグ技術こそが、その人のVBAスキルと言っても良いものです。
これらを使いこなすことで、デバッグを進めます。
(ウォッチウィンドウよりローカルウィンドウの方が使いやすく汎用性があります。)
つまり、デバッグ技術の差が、VBA開発の時間の差になるとも言えます。
もちろん、最初に書いたVBAコードの質によって、デバッグ量(必要な時間)も変わってきます。
逆に言えば、
デバッグしやすいVBAコードこそが良いVBAコードと言っても良いでしょう。
【本サイト内の関連ページ】
コーディングとデバッグ
ローカルウィンドウの使い方
実行時にトラップ可能なエラー番号一覧
よくあるVBA実行時エラーの解説と対応
VBAエキスパート公式テキスト
こちらは必須として購入した方が良いでしょう。
ちょっと高いなーとは思いますが、
書籍を購入することで、学習用データが提供されています。
・サンプルブック
・VBAエキスパート模擬問題
これらが使えるようになります。
このシリーズでは、テキストを読みながら学習していることを前提とします。
同じテーマ「VBAエキスパート対策」の記事
ステートメント
ブックの操作
シートの操作
デバッグデの基礎
マクロの実行
VBAベーシック試験対策まとめ
プロシージャ
イベント
ステートメント(スタンダード)
関数
エラーへの対処
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
- ホーム
- マクロVBA入門編
- VBAエキスパート対策
- デバッグデの基礎
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。