読者です 読者をやめる 読者になる 読者になる

アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

イミディエイトウインドウの使い方と挙動

参考:イディミエイト・ウォッチ・ローカルウィンドウ - Excelでお仕事!
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_040_025.html

ついさっきまで、イミディエイトウインドウについては「Debug.Printで指定した内容を出力することができるテキストエディタ」くらいの認識だったんですが、上記ページを見て初めてセルの中身なんかが出力できることを知りました…。
えっこれ今更なの?みんな知ってるやつなの??と思いつつ色々遊んでみました。

基本:デバッグ出力

プログラム中に「Debug.Pring」を埋め込むことで、変数などをイミディエイトウインドウに出力できる。

Dim hoge As Long
hoge = 123

' 変数hogeの中身を出力
Debug.Print hoge

' 「hoge」という文字列を出力
Debug.Print "hoge"

f:id:honey8823:20150902145246p:plain

セルの中身を出力する

プログラムとは関係なく、
イミディエイトウインドウ内に「?」をつけて表示するものを書いてEnterすると、中身が表示されます。

' A1セルの中身を表示
?Range("A1")
hoge

' A1セルの中身を表示
?ThisWorkBook.Sheets("Sheet1").Range("A1").Value
hoge

' A1セルのアドレスを表示
?Range("A1").Address
$A$1

おおー。
今まで、「こういうものを取得したいけど文法合ってるかな?」みたいなときはデバッグ入れて動かして試してたんですが、こういう簡単なものであればここで試せばOKですね。

イミディエイトウインドウに直接「Debug.Print Range("A1")」と書いても同じ挙動だったので、省略形が「?」という扱いなのかも?
(尚、プログラムの方に「?Range("A1").Address」と書くと、「Print Range("A1")」に自動で補完されます)

セルの中身以外も…

他にもいろいろ試してみました。

' ブック名を表示
?ThisWorkBook.Name
Book1

' 1+2を計算
?1+2
 3

' 9の平方根
?Sqr(9)
 3

' 「hoge」の「o」を「a」に置換
?Replace("hoge", "o", "a")
hage

' 特定の文字列
?"hoge"
hoge

関数の動きを試したり、計算したりも可能ですね。

変数も使用可能

変数は使えるのかなーと思ってやってみたらこの通り。

a=1
b=2
?a+b
 3

変数宣言はできませんでしたが、宣言なしで代入して使うことが可能でした。
ただし、「a=1」や「b=2」を書いたあとは必ずEnterキーを押す必要があります。
Enterキーを押すことでその行が認識される、という挙動のようです。

尚、右クリックして「リセット」を選択すると、変数の中身はリセットされます。

a=1

?a
 1

?a
 1

' ここでリセット

?a
 0

じゃあIf文やFor文は…と思いましたが、これは厳しそう。
さっきも書いたとおり、Enterキーを押すことでその行が認識されるようなので、
少なくとも1行で書ける構文でないとダメなようですね。

For i = 0 To 5 'ここでEnterすると構文エラー

For i = 0 To 5 hoge = 1 Next ' これはこれでエラー

自分で作った関数を呼ぶことは可能

f:id:honey8823:20150902172053p:plain

画像はPublicになってますが、Privateもいけました。
ローカル関数作ったので簡単に確認、なんて時もこれでOKですね。