VBA入門
VBEの使い方:イミディエイト ウィンドウ

VBAの開発環境であるVBEの基本的な使い方
公開日:2019-10-02 最終更新日:2021-10-13

VBEの使い方:イミディエイト ウィンドウ


VBE(Visual Basic Editor)は、VBAで使われるコードエディタ、コンパイラ、デバッガ、その他の開発支援ツールが統合された開発環境です。


ここではイミディエイト ウィンドウの使い方について説明します。


目次

イミディエイト ウィンドウの表示

メニュー「表示」→「イミディエイト ウィンドウ」
ショートカット:Ctrl + G

VBA VBE イミディエイト

初期設定では、コードウィンドウの下にドッキング表示されます。

VBA VBE イミディエイト


イミディエイト ウィンドウの基本的な使い方

ウィンドウ内での操作により、ウィンドウに変数の値を出力したり、ステートメントを実行したりできます。

・VBA実行中は、実行中のプロシージャー内で実行される。
・実行していない時は、新規の標準モジュール(Option Explicitがない)上で実行される。

このように考えて以下を読むと理解しやすいと思います。
これはそのように考えると理解しやすいという事で、正確にはスコープ(Public,Private)の扱いに違いがあります。


値を表示

VBA実行中に変数の値を表示
実行中のプロシージャーから参照可能な変数については、
?に続けて変数を書いてEnterすることで値を表示できます。

VBA VBE イミディエイト

数値の場合は先頭に符号が付きますので、正数の場合は半角スペースが先頭に付いて表示されます。

配列全体を指定するとエラーとなります。
VBA VBE イミディエイト

配列の要素を指定すれば表示できます。

VBA VBE イミディエイト
オブジェクト変数の場合は既定のプロパティが単一の値の場合は表示できますが、
既定のプロパティが無い場合や、戻り値がオブジェクトの場合はエラーとなります。
VBA VBE イミディエイト

変数のデータ型を調べる事が出来ます。
TypeName 変数に関する情報を提供する文字列型 (String) の文字列を返します
VarType 変数の内部処理形式を表す整数型 (Integer) の値を返します

これらの関数を使って、

マクロ VBA サンプル画像

複数の変数を確認したい場合は、ローカルウィンドウが便利です。
・ローカル ウィンドウの表示 ・ローカル ウィンドウの基本的な使い方 ・ローカル ウィンドウの制限 ・ローカル ウィンドウの最後に


モジュールレベル変数の値を表示
VBA実行中ではない場合でも、モジュールレベル変数であれば表示できます。

VBA VBE イミディエイト

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

Privateなモジュールレベル変数を表示する場合は、モジュール名で修飾します。

VBA VBE イミディエイト


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

VBA VBE イミディエイト

Ctrl+Spaceで入力候補が表示されます。

VBA VBE イミディエイト


VBA関数の結果を表示
VBAの組み込み関数の結果を表示できます。

VBA VBE イミディエイト


Functionプロシージャーの戻り値を表示
作成したFunctionプロシードャーの戻り値を確認できます。

VBA VBE イミディエイト


※プロシージャーがPrivateの場合は、モジュール名で修飾してください。
?Module1.文字列編集


?はPrintの糖衣構文です
?はPrintの糖衣構文(読み書きしやすさのための書き方)です。
イミディエイト ウィンドウ内では、「?」でも「Print」でもどちらで記述しても同じになります。

プロシージャー内で「?」を記述すると、自動で「Print」に置換されますが、このPrintだけではエラーとなってしまいます。


ステートメントを実行

VBA実行中に変数の値を変更
?を書かずに、変数への代入式を書いてEnterすることで、変数の値を変更できます。

VBA VBE イミディエイト

iに3が入っているときに、
i=1
これでEnterして、再度iの値を表示しています。


モジュールレベル変数の値を変更
VBAのモジュールレベル変数は、VBAの実行が終了した後でも、その値を保持しています。
モジュールレベル変数については、VBA実行中ではない場合でも変更できます。
変更方法は、前記のVBA実行中に変数の値を変更と同じです。

※モジュールレベル変数がPrivateの場合は、モジュール名で修飾してください。


オブジェクトのプロパティの値を変更
?を書かずに、プロパティへの代入式を書いてEnterすることで、プロパティの値を変更できます。

VBA VBE イミディエイト

A1セルに"test"が入っているときに、
range("A1")="てすと"
これでEnterして、再度A1セルの値を表示しています。

重要!
Application.ScreenUpdating = True
デバッグ中にVBAが途中終了した場合、
Application.ScreenUpdatingがTrue状態に戻らない場合があり、
クリックしても画面が変わらない等の症状になる場合があります。
このような場合は、イミディエイト ウィンドウで、
Application.ScreenUpdating = Trueを入れてEnterしてください。

Application.EnableEvents = True
イベント処理の中で、Application.EnableEvents = Falseとしている場合、
途中でVBAが終了してしまうと、そのままになってしまい、新たなイベントが発生しなくなります。
このような場合は、イミディエイト ウィンドウで、
Application.EnableEvents = Trueを入れてEnterしてください。


プロシージャーを実行
プロシージャーを直接起動できます。

VBA VBE イミディエイト

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

VBA VBE イミディエイト


プロシージャーがPrivateの場合
VBA実行中は、その時点で参照可能なプロシージャーはそのまま実行できます。
その時点で参照出来ない(スコープ範囲外の)Privateプロシージャーは、モジュール名で修飾してください。
またVBA停止中は、Privateプロシージャーはモジュール名で修飾してください。


Debug.Print

VBAの任意の位置で、
Debug.Print 変数・定数・式
これで、イミディエイト ウィンドウに出力できます。

変数・定数・式は、単一の値である必要があります。
配列やオブジェクトは出力できません。

;(セミコロン)に続けて書かれた変数・定数・式の値は、改行されずに表示されます。
,(カンマ)に続けて書かれた変数・定数・式の値は、一定の字数間隔をあけて表示されます。

VBA VBE イミディエイト

セミコロンやカンマは、イミディエイト ウィンドウで?で表示する場合でも使えます。


イミディエイト ウィンドウをクリアする

イミディエイト ウィンドウの内容は後ろにどんどん追加されていってしまいます。
(一定行数に達すると、古いものが消されます。)
どこかの時点で全消去したい時は、
ウィンドウ内の文字列を全選択(Ctrl+A等)して「Delete」してください。


イミディエイト ウィンドウの高度な使い方

イミディエイト ウィンドウでは前述のとおり任意のステートメントを実行できます。
(Dim、With等、実行出来ないステートメントはあります)

ただし、1行で確定(1行で処理が完結)していなければなりません。
つまり、複数行をまとめて実行することはできません。
従って、ブロック構文(Fo~NextやIf~End If)は普通に書くことはできません。

イミディエイト ウィンドウで複数ステートメントを実行するには、
:(コロン)で複数ステートメントを1行に書いて実行します。
このような方法については、以下でいろいろなパターンが紹介されています。
VBAのデバッグにおける真のイミディエイト ウィンドウの使い方

イミディエイトでは、変数宣言のDimは実行できませんが、
そもそも、Option Explicitにかかわらず変数宣言の必要がありません。
つまり、イミディエイトではいきなり変数を使う事が出来ます。
そして、その変数はイミディエイト内で値が保持されます。

VBA VBE イミディエイト

For~Nextを1行に書いて、

VBA VBE イミディエイト

配列も扱えます。

VBA VBE イミディエイト

With~End Withは使えませんので、変数に入れることで対応します。

Set a = Selection.SpecialCells(xlCellTypeBlanks):a.FormulaR1C1 = "=R[-1]C":For Each b In a:b.Value = b.Value:Next

普通のプロシージャーに書き直してみると理解できると思いますが、
これは、選択範囲内の空白セルに直ぐ上のセルを入れています。
さすがに、このくらいになると、プロシージャーを書いたほうが良いですね。

さらに、こんなことも可能です。
(ちょっと現実離れしてはいますが参考まで)

VBA VBE イミディエイト

以上のように、ある程度はプロシージャーを書くのと同様の事が出来ます。
タイピングが気にならなければ、このような使い方も可能だという紹介です。

ただし、イミディエイト ウィンドウに入力した内容は、エクセルを閉じると消えてしまいますので、
1回その場だけの実行として素早く実行したい場合に限定されます。
通常は、普通にプロシージャーを書いたほうが良いでしょう。


イミディエイト ウィンドウの最後に

イミディエイト ウィンドウは、VBAデバッグではなくてはならないものです。
特段に難しい使い方を覚える必要はありませんが、最低限の使い方はしっかり覚えておきましょう。
ローカル ウィンドウウォッチ ウィンドウと使い分けて、効率良くデバッグをしてください。




同じテーマ「マクロVBA入門」の記事

VBEの使い方:VBE画面の全体説明
VBEの使い方:ツールのオプション設定
VBEの使い方:ツールバー
VBEの使い方:右クリックメニューとヘルプ
VBEの使い方:ショートカットキーとコード編集
VBEの使い方:イミディエイト ウィンドウ
VBEの使い方:ローカル ウィンドウ
VBEの使い方:ウォッチ ウィンドウ
VBEの使い方:オブジェクト ブラウザー
VBEの使い方:デバッグ


新着記事NEW ・・・新着記事一覧を見る

ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ