VBEの使い方:イミディエイト ウィンドウ
VBE(Visual Basic Editor)は、VBAで使われるコードエディタ、コンパイラ、デバッガ、その他の開発支援ツールが統合された開発環境です。
ここではイミディエイト ウィンドウの使い方について説明します。
目次
イミディエイトウィンドウの表示
ショートカット:Ctrl + G


イミディエイトウィンドウの基本的な使い方
・実行していない時は、新規の標準モジュール(Option Explicitがない)上で実行される。
このように考えて以下を読むと理解しやすいと思います。
値を表示
VBA実行中に変数の値を表示
?に続けて変数を書いてEnterすることで値を表示できます。



既定のプロパティが無い場合や、戻り値がオブジェクトの場合はエラーとなります。

モジュールレベル変数の値を表示

プロシージャー「sample」を実行しておいて、
その後に、?Pvarで値が表示されます。

オブジェクトのプロパティの値を表示
非実行中であっても、?オブジェクト.プロパティで表示できます。
※戻り値が単一の値以外(配列やオブジェクト)はエラーになります。
※戻り値のあるメソッドはプロパティ同様に扱えます。


VBA関数の結果を表示

Functionプロシージャーの戻り値を表示

?Module1.文字列編集
ステートメントを実行
VBA実行中に変数の値を変更

i=1
これでEnterして、再度iの値を表示しています。
モジュールレベル変数の値を変更
モジュールレベル変数については、VBA実行中ではない場合でも変更できます。
変更方法は、前記のVBA実行中に変数の値を変更と同じです。
オブジェクトのプロパティの値を変更

range("A1")="てすと"
これでEnterして、再度A1セルの値を表示しています。
Application.ScreenUpdatingがTrue状態に戻らない場合があり、
クリックしても画面が変わらない等の症状になる場合があります。
このような場合は、イミディエイトウィンドウで、
Application.ScreenUpdating = Trueを入れてEnterしてください。
途中でVBAが終了してしまうと、そのままになってしまい、新たなイベントが発生しなくなります。
このような場合は、イミディエイトウィンドウで、
Application.EnableEvents = Trueを入れてEnterしてください。
プロシージャーを実行

と入力してEnterしています。
実行できるプロシージャーは特に制限はありません、引数も指定できます。

その時点で参照出来ない(スコープ範囲外の)Privateプロシージャーは、モジュール名で修飾してください。
またVBA停止中は、Privateプロシージャーはモジュール名で修飾してください。
Debug.Print
Debug.Print 変数・定数・式
これで、イミディエイト ウィンドウに出力できます。
配列やオブジェクトは出力できません。
,(カンマ)に続けて書かれた変数・定数・式の値は、一定も字数間隔をあけて表示されます。

イミディエイトウィンドウをクリアする
(一定行数に達すると、古いものが消されます。)
どこかの時点で全消去したい時は、
ウィンドウ内の文字列を全選択(Ctrl+A等)して「Delete」してください。
イミディエイトウィンドウの高度な使い方
(Dim、With等、実行出来ないステートメントはあります)
ただし、
1行で確定(1行で処理が完結)していなければなりません。
つまり、
複数行をまとめて実行することはできません。
従って、ブロック構文(Fo~NextやIf~End If)は普通に書くことはできません。
:(コロン)で複数ステートメントを1行に書いて実行します。
このような方法については、以下でいろいろなパターンが紹介されています。
VBAのデバッグにおける真のイミディエイトウィンドウの使い方
そもそも、Option Explicitにかかわらず変数宣言の必要がありません。
つまり、イミディエイトではいきなり変数を使う事が出来ます。
そして、その変数はイミディエイト内で値が保持されます。



Set a = Selection.SpecialCells(xlCellTypeBlanks):a.FormulaR1C1 = "=R[-1]C":For Each b In a:b.Value = b.Value:Next
普通のプロシージャーに書き直してみると理解できると思いますが、
これは、選択範囲内の空白セルに直ぐ上のセルを入れています。
さすがに、このくらいになると、プロシージャーを書いたほうが良いですね。
(ちょっと現実離れしてはいますが参考まで)

タイピングが気にならなければ、このような使い方も可能だという紹介です。
ただし、
イミディエイトウィンドウに入力した内容は、エクセルを閉じると消えてしまいますので、
1回その場だけの実行として素早く実行したい場合に限定されます。
通常は、普通にプロシージャーを書いたほうが良いでしょう。
イミディエイトウィンドウの最後に
特段に難しい使い方を覚える必要はありませんが、最低限の使い方はしっかり覚えておきましょう。
ローカルウィンドウ、ウォッチウィンドウと使い分けて、効率的よいデバッグをしてください。
同じテーマ「マクロVBA入門」の記事
VBEの使い方:VBE画面の全体説明
VBEの使い方:ツールのオプション設定
VBEの使い方:ツールバー
VBEの使い方:右クリックメニューとヘルプ
VBEの使い方:ショートカットキーとコード編集
VBEの使い方:イミディエイト ウィンドウ
VBEの使い方:ローカル ウィンドウ
VBEの使い方:ウォッチ ウィンドウ
VBEの使い方:オブジェクト ブラウザー
VBEの使い方:デバッグ
新着記事NEW ・・・新着記事一覧を見る
VBA100本ノック 64本目:カメラ機能(リンクされた図)|VBA練習問題(1月10日)
VBA100本ノック 63本目:複数シートの連結|VBA練習問題(1月9日)
VBA100本ノック 62本目:独自のZLOOKUP関数を作成|VBA練習問題(1月8日)
VBA100本ノック 61本目:「ふりがな」の取得と設定|VBA練習問題(1月6日)
VBA100本ノック 60本目:「株式会社」の表記ゆれ置換|VBA練習問題(1月5日)
VBA100本ノック 59本目:12ヶ月分のシートを四半期で分割|VBA練習問題(1月4日)
Select Caseでの短絡評価(ショートサーキット)の使い方|VBA技術解説(1月3日)
VBA100本ノック 迷宮編:巡回セル問題|VBA練習問題(12月31日)
VBA100本ノック 58本目:番号リストを簡潔にした文字列で返す|VBA練習問題(12月30日)
VBA100本ノック 57本目:ファイルの更新日時|VBA練習問題(12月29日)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.繰り返し処理(Do Loop)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。