VBAのイミディエイトウィンドウで2次元配列を印刷する方法これを行うための一般的な方法はありますか?イミディエイトウィンドウで行ごとに配列の1行をプロットするいくつかの方法は、この問題を解決できます。これは、配列の各行に対してこのコードをループすることだけが必要だからです。
誰でも参照できるように、簡単なループを作成しました。
Sub WriteArrayToImmediateWindow(arrSubA As Variant)
Dim rowString As String
Dim iSubA As Long
Dim jSubA As Long
rowString = ""
Debug.Print
Debug.Print
Debug.Print "The array is: "
For iSubA = 1 To UBound(arrSubA, 1)
rowString = arrSubA(iSubA, 1)
For jSubA = 2 To UBound(arrSubA, 2)
rowString = rowString & "," & arrSubA(iSubA, jSubA)
Next jSubA
Debug.Print rowString
Next iSubA
End Sub
これがデバッグ目的の場合は、プログラムの実行中に配列の内容を表示するマクロを記述するのは不便です。問題を引き起こす可能性もあります。
プログラムの実行中にデバッグするには、すべてのVBプロジェクトで使用できるコードフリーのメソッドが必要で、配列の内容をスパイします。
この例では、「aLookList」はバリアント配列です。 「Value2」の下の値は、範囲から取得されます。
ここで別の答えは、ウォッチペインの使用を提案しています。これは私の回答に似ていますが、ポスターに、配列名をWatchに追加するだけで配列全体(すべてのセル)をスパイできることは説明されていませんでした。次に、ノードをドリルダウンします。 [ウォッチ]ウィンドウに対する[ローカル]ウィンドウの利点は、[ローカル]ペインでは、手動で配列をペインに追加する必要がなく、すでにそこにあることです。したがって、少し手間がかかりません。
いいえ、必要があります。
列B(Age)の列A(Name)の下にデータを貼り付け
Name Age
A 10
B 20
C 30
D 40
E 50
F 60
G 70
以下のコードを実行します
Sub Array_Demo()
Dim arr() As String
Dim i As Integer, j As Integer
' fill the array with strings
Last = Range("A" & Rows.Count).End(xlUp).Row
ReDim arr(Last, 1)
For i = 0 To Last - 1
arr(i, 0) = Cells(i + 1, 1).Value
arr(i, 1) = Cells(i + 1, 2).Value
Next
' only one loop to display its contents !!!
Dim v As Variant
For Each v In arr
Debug.Print v
Next
End Sub
イミディエイトウィンドウで以下の出力を確認できます
Name
A
B
C
D
E
F
G
Age
10
20
30
40
50
60
70
'Define 2d array
arr = [ {"A",1; "B",2; "C",3 } ]: _
For r = LBound(arr, 1) To UBound(arr, 1): _
For c = LBound(arr, 2) To UBound(arr, 2): _
Debug.Print arr(r, c): _
Next c: _
Next
私はこれのために独自の関数を書きました。 VBAの場合はprint_r()。配列、辞書、コレクション、MatchCollectionなどを評価できます。全体もネストされます。さらに、データ型が指定され、特殊文字はUnicodeとして文字列に表示されます。
http://wiki.yaslaw.info/doku.php/vba/functions/print_r/index
print_r(array(1,2,3,array("A","B")))
<Variant()> (
[0] => <Integer> 1
[1] => <Integer> 2
[2] => <Integer> 3
[3] => <Variant()> (
[0] => <String> 'A'
[1] => <String> 'B'
)
)
print_r([{1,2;3,4}])
<Variant()> (
[1.1] => <Double> 1
[1.2] => <Double> 2
[2.1] => <Double> 3
[2.2] => <Double> 4
)