こんにちは! フリーランスエンジニア兼ライターのワキザカ サンシロウです!
突然ですが皆さんは、ExcelVBAを書いたことがありますか?
マクロの記録で少し使ってみたり、ネットで調べてコピペで動かしてみたけどそれ以上のことがなかなかできない・・・という人も多いのでは?
そこで今回は、
・マクロとExcelVBAの違いとは?
といった基礎的なことから、
・デバックとは?
・なぜデバッグが必要なのか?
・イミディエイトウィンドウの使い方とは?
といった応用的なことも含め、徹底的に解説します!
マクロとExcelVBAの違いとは?
まず最初に、マクロとExcelVBAの違いについて簡単に説明します。
マクロとは、Excelで実現したい操作をまとめた機能のことです。
その機能を実現するための操作手順をソースコードで書いたものが、ExcelVBAです。
例えば、『データ一覧シートのデータを利用して、請求書を自動で作成する機能』のようなマクロを作ることができます。
この場合、「データ絞り込み」、「コピー」、「印刷」のような具体的な操作をExcelVBAで書くことで、マクロを作ることができます。
今回は、ExcelVBAの基礎的な書き方は省いていますので、ExcelVBAの初歩について知りたい方はこちらを見てみてくださいね!
なぜデバッグが必要なのか?
では、ExcelVBAを理解して書くために必要なデバッグについて簡単に説明します。
デバッグとは、エラーの原因を調べて機能が動くように直していく作業のことです。
「あれ?ネットで書いてある通りコピペして実行しているのに動かないぞ?なんでだろう・・・」
といった場合に、原因を調べながらなおしていく作業ですね。
ただ、エラーの原因を調べて自力で解決するのは、結構大変です。
原因を調べるといっても、ネットの情報は書いている人の環境によって内容がバラバラだったりしますし、そもそも情報が少ないといったケースも多いです。
エラー原因を調べて対処してたら1日終わってしまった・・・
とならないためにも、魔法のツール、イミディエイトウィンドウについてご紹介します。
イミディエイトウィンドウとは?
まずはじめに、イミディエイトウィンドウでできることについて説明します!
イミディエイトウィンドウでできることは主に次の二つです。
- ネットで調べた関数や、値の計算処理、変数の値などを確認できる
- 作った関数を実行したり、戻り値を確認できる
書いたVBAのコードが正しく動いているか確認するときに使えるため、とても便利な機能ですね。
イミディエイトウィンドウの開き方
それではまずはじめに、イミディエイトウィンドウの開き方について説明します。
1. Excelの開発タブからVisual Basicを選択または、Alt + F11でVBEを開きます。
2. 表示タブからイミディエイトウィンドウを選択します。
3. 画面の下に、イミディエイトウィンドウのエリアが表示されます。
※画像では背景が黒になっていますが、通常は白です。
これでイミディエイトウィンドウを使う準備が完了です。
値の確認方法について
では早速、値の確認方法について解説します!
計算した結果を確認する
まずは、基本的なところから。
足し算、引き算、掛け算、割り算などの計算結果を確認することができます。
『? + 「計算式」』を入力し、Enterキーを押すことで結果を確認することができます。
?1 + 2 3
といった使い方ですね。
また、数値だけでなくセルの値を使って計算した結果なども確認することができます。
A1セルに1、A2セルに2を入力していた場合、次のように確認することもできます。
?Range(“A1”).Value + Range(“A2”).value 3
になります。
関数の結果を確認する
ExcelVBAを書いていると、ExcelVBAの関数を使うケースがよくあります。
例えば、左から指定した数分文字列を取ってくるLeft関数があります。
Left(文字列,とってくる数)
このような場合でも、次のように入力することで確認することができます。
?Left(“12345”,3) 123
難しい関数を使う場合は、最初にイミディエイトウィンドウで正しい結果が出るか確認してから使うといいかもしれませんね。
プロパティの値を確認する
Excelには便利なプロパティがたくさんあります。
たとえば、ファイルを保存する機能を作りたい場合、今開いているExcelと同じフォルダパスを知りたいケースがあります。
「thisworkbook.Path」で取得できるのですが、これだけでは実際に何が入っているのかはよくわからないですよね。
そんな時でも、
?thisworkbook.path
のように、値を確認することができます。
ネットで調べた情報をそのまま使うのではなく、値を確認してから使うと安心ですよね。
変数の値を確認する
変数の値も確認することができます。
VBAのコード上で、
Debug.print 変数名
を入力して実行することでイミディエイトウィンドウに値を表示することができます。
また、少し応用になりますが、デバッグ実行してブレークポイントで止めたときにも、変数の値を確認することができます。
?変数名
例えば次のように確認することができます。
VBAの関数
Sub 足し算() Dim Year '年 Dim Month '月 Dim YearMonth '年月 Year = "2018" Month = "12" YearMonth = Year & Month End Sub
YearMonthの行でブレークポイントを張って処理を止めたあとの、イミディエイトウィンドウでの結果確認
?Year 2018
?Month 12
このように、変数の値を途中で確認することができます。
この例では処理がシンプルですが、複雑な計算をした結果を変数に入れて、その変数を別の計算に使うような処理が複雑な場合に、途中で値が確認できると便利ですよね。
作成した関数の動作確認方法について
よく使う処理は、関数として作成する場合があると思います。
Function 合計値計算(単価 As Integer, 数量 As Integer) As Integer 合計値計算 = 単価 * 数量 End Function
こちらは、『引数の単価、数量をかけた結果を返す関数』なのですが、この関数の結果を確認したい場合は次のように計算結果を確認することができます。
?合計値計算(1000,3) 3000
また、Subで関数を作った場合は、
call 関数名()
で処理を実行することができます。
イミディエイトウィンドウでどちらも実行できると覚えておけば、確認も簡単にできるのでお勧めです!
まとめ
今回は、ExcelVBAの効率的なデバッグ方法であるイミディエイトウィンドウに特化して解説しました!
ExcelVBAで作業を自動化できれば、時間を創りだすことができます。
空いた時間は、自分の勉強や、ほかの仕事を終わらせる時間として活用できると思います。
ぜひ、チャレンジしてみてくださいね!