「vba ウォッチ式 配列」
「vba ウォッチウィンドウ 配列」
という検索キーワードを元に、VBE(Visual Basic Editor)のデバッグ用ツールでは、ウォッチウィンドウやイミディエイトウィンドウより、ローカルウィンドウのほうが初心者向けであることをご紹介しました。
確かに要素数が多くない配列の場合はローカルウィンドウで十分ですが、たくさんの要素を持った配列の、特に最後のほうの要素の中身を確認するような場合、ウォッチウィンドウのほうが便利なケースが出てきます。
要素数の多い配列変数を使ったサンプルマクロ
以下のようなプロシージャで、配列変数・arrの、1,000番目や999番目の中身を確認するケースを考えてみます。
Dim arr(1 To 1000) As String
arr(999) = "を"
arr(1000) = "ん"
Stop
ローカルウィンドウを使って最後のほうの要素を確認するには、ローカルウィンドウ内を下のほうまでスクロールする必要があります。
ローカルウィンドウ内にカーソルをおいて、[End]キーを押せば一番下までスクロールすることはできますが、デバッグ中にこの作業を何度も行うのは、やはり面倒なものです。
このような場合にはウォッチウィンドウのほうが便利です。
ウォッチウィンドウで配列を確認する
上記のマクロで、配列変数の1,000番目の要素の中身を確認するなら、以下のようにウォッチ式を追加します。※配列・arrのインデックス番号・1000の要素の中身を確認する例
[ウォッチ式の追加]ダイアログ-[式]欄に
「arr(1000)」と入力して[OK]ボタンを押す
上記のウォッチ式を追加しておいて、ウォッチウィンドウを表示すると1,000番目の要素だけを確認できます。
999番目の要素の中身を確認したいのなら、「arr(999)」をウォッチ式に追加です。
直値を指定せずに最後の要素を確認するウォッチ式
動的配列の場合に、インデックス番号・添え字を直接数値で指定することができない、というケースもあります。
その場合は「arr(UBound(arr))」をウォッチ式に追加してください。
UBoundは、引数に指定された配列変数の、添字・インデックス番号の最大値を返す関数です。
そのUBound関数で取得した配列のインデックス番号の最大値が、配列の添字として指定されているのが、「arr(UBound(arr))」という式です。
最後の要素ではなく、その一つ前の要素をウォッチ式で確認したいのなら「arr(UBound(arr) - 1)」をウォッチ式に追加です。
ウォッチ式がわからない場合はプロシージャで理解しましょう
ここで登場する「arr(UBound(arr))」は、マクロ内・プロシージャ内で登場する式と同じです。
配列の全要素に対して処理を行う際の、
For i = LBound(arr) to UBound(arr)
MsgBox arr(i)
Next i
といったループ文の中で登場する「arr(i)」という式で、変数・iの代わりに、配列のインデックス・添字の最大値を返すUBound関数を使った「UBound(arr)」が指定されているのが「arr(UBound(arr))」です。
ですから「arr(UBound(arr))」という式を、プロシージャの中で書けないレベルの方が、ウォッチ式としてこの式を書くことは現実的には不可能なのです。
「arr(UBound(arr))」というウォッチ式の意味がピンとこないという方は、以下のプロシージャを変数・nの値に注目しながらステップ実行して考えてみてください。
Dim arr(1 To 1000) As String
Dim n As Long
arr(999) = "を"
arr(1000) = "ん"
n = UBound(arr)
MsgBox arr(n)
MsgBox arr(n - 1)
上記プロシージャの「arr(n)」が、先のウォッチ式「arr(UBound(arr))」と同じ意味です。ウォッチ式としての「arr(UBound(arr))」をそのまま理解するよりも、プロシージャの中で分解して考えるほうが、理解が容易になるはずです。
- Newer:SUMIF関数よりピボットテーブルを使いましょう
- Older:関数もいいですけれど演算子も使いましょう
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » 配列をウォッチウィンドウで確認する