今回はDebug.Printの使い方(テクニック)を紹介します。Chromeのconsole.logのように高機能ではありませんが、知っていると少しだけ得するテクニックです。とはいえ、初心者のうちから知っておくと大幅な効率化になりますので、ぜひ全ての内容を押さえておきましょう。
基本のDebug.Print
基本ですね。イミディエイトウィンドウに出力されます。自動的に改行が入ります。
Sub sample()
Debug.Print 123456789
Debug.Print "あいうえおかきくけこ"
Debug.Print #6/23/2019#
Debug.Print True
Debug.Print InputBox("お名前を入力してください")
End Sub
123456789
あいうえおかきくけこ
2019/06/23
True
山田太郎
セミコロン付きのDebug.Print(文字列結合、改行無しも可)
セミコロンで区切ることで文字列結合することができます。文字列結合のアンパサンド(&)と同義になります。また、Debug.Printの最後をセミコロンで終了させると改行無しで出力することができるため、イミディエイトウィンドウの200行問題の回避にも利用することができます。
Sub sample()
Dim i As Long
For i = 1 To 100
Debug.Print i; ' セミコロンを最後にすると改行されない
If i Mod 20 = 0 Then Debug.Print ' 20の倍数毎に改行
Next i
Debug.Print "iの値は"; i; "です。"
Debug.Print "文字列は"; "セミコロンで"; "結合されます"
Debug.Print "セミコロンを最後にすると";
Debug.Print "改行されません"
End Sub
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
iの値は 101 です。
文字列はセミコロンで結合されます
セミコロンを最後にすると改行されません
カンマ付きのDebug.Print(文字列結合、改行無しも可)
カンマで区切ることでも文字列結合することができます。セミコロンとの違いは、結合する際にタブ区切りとなることです。こちらも改行無しで出力することができるため、イミディエイトウィンドウの200行問題の回避にも利用することができます。
Sub sample()
Dim i As Long
For i = 1 To 20
Debug.Print i, ' カンマを最後にすると改行されない
If i Mod 4 = 0 Then Debug.Print ' 4の倍数毎に改行
Next i
Debug.Print "iの値は", i, "です。"
Debug.Print "文字列は", "タブで", "結合されます"
Debug.Print "0123456789012", "@"
Debug.Print "01234567890123", "@"
End Sub
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
iの値は 21 です。
文字列は タブで 結合されます
0123456789012 @
01234567890123 @
SpcとTabを使ったDebug.Print(出力の整形)
Spc関数を使うと半角スペースが指定した数だけ出力されます。また、Tab関数では指定した位置にカーソルが移動します。出力イメージについては、サンプルを見ていただくのが早いです。
Sub sample()
Debug.Print "abc"; Spc(1); "def"; Spc(2); "ghi"; Spc(3); "jkl"
Debug.Print "星 松次郎"; Tab(20); "ホシ マツジロウ"; Tab(40); "1979/09/08"
Debug.Print "杉田 道正"; Tab(20); "スギタ ミチマサ"; Tab(40); "1976/06/14"
Debug.Print "児玉 栄理子"; Tab(20); "コダマ エリコ"; Tab(40); "1970/10/06"
Debug.Print "篠原 豊秋"; Tab(20); "シノハラ トヨアキ"; Tab(40); "1988/03/11"
Debug.Print "徳田 圭"; Tab(20); "トクタ ケイ"; Tab(40); "1989/09/19"
Debug.Print "角田 孝敏"; Tab(20); "ツノダ タカトシ"; Tab(40); "1971/01/23"
Debug.Print "新谷 勝許"; Tab(20); "アラヤ カツモト"; Tab(40); "1994/05/13"
Debug.Print "安井 愛次郎"; Tab(20); "ヤスイ アイジロウ"; Tab(40); "1971/12/03"
Debug.Print "松岡 成美"; Tab(20); "マツオカ ナリミ"; Tab(40); "1988/02/04"
Debug.Print "小山 玲"; Tab(20); "コヤマ レイ"; Tab(40); "1992/07/11"
Debug.Print "横井 幸博"; Tab(20); "ヨコイ ユキヒロ"; Tab(40); "1988/11/20"
End Sub
abc def ghi jkl
星 松次郎 ホシ マツジロウ 1979/09/08
杉田 道正 スギタ ミチマサ 1976/06/14
児玉 栄理子 コダマ エリコ 1970/10/06
篠原 豊秋 シノハラ トヨアキ 1988/03/11
徳田 圭 トクタ ケイ 1989/09/19
角田 孝敏 ツノダ タカトシ 1971/01/23
新谷 勝許 アラヤ カツモト 1994/05/13
安井 愛次郎 ヤスイ アイジロウ 1971/12/03
松岡 成美 マツオカ ナリミ 1988/02/04
小山 玲 コヤマ レイ 1992/07/11
横井 幸博 ヨコイ ユキヒロ 1988/11/20
配列のDebug.Print(Joinを利用したテクニック)
String配列限定となりますが、Joinを使うことでFor文無しで出力することができるテクニックです。Joinはデリミタを指定することができるので、可読性を上げることもできます。
Sub sample()
Dim ary(5) As String
ary(0) = "abc"
ary(1) = "def"
ary(2) = "ghi"
ary(3) = "jkl"
ary(4) = "mno"
ary(5) = "pqr"
Debug.Print Join(ary)
Debug.Print Join(ary, ",")
End Sub
abc def ghi jkl mno pqr
abc,def,ghi,jkl,mno,pqr
Debug.Printのクリア(イミディエイトウィンドウのクリア)
Debug.Printの出力結果は、イミディエイトウィンドウに表示されます。デバッグする毎にクリアしたいと思うことがあると思います。ググってみると色々な方が苦労して解決方法を模索しているようですが、これといった方法はまだ見つかっていないようです。(Debug.Printのループ、SendKeysによる処理など)
私のお勧めする方法は、非常に原始的な方法ですが以下となります。3ステップのみです。
1. CTRL+g+a
2. Delete
3. F7
ただのショートカットキーですが、無意識に使えるようになれば、かなり重宝できると思います。