bsreekanth
Dictionaryオブジェクトはuのための非常に簡単かもしれないが、私は、APIに精通していないですVBスクリプト2の一部として1996年に戻ってきて、後でVB Scriptingランタイムライブラリ(scrrun.dll)に追加されました。 Dictionaryオブジェクトを使用するには、Microsoft Scripting Runtimeへの参照を追加する必要があります。
辞書にアイテムを追加する構文は、キーを使用すると、エラーになります他にユニークである必要があります
DictObject.Add **<Unique key>**,Value
です。どのように動作するかを理解するために、さまざまなシナリオをカバーしましょう。
は、我々が行(やないセルテキスト)を保存する例に
を見てみましょう、その後、あなたは私が作成するために、変数「J」を使用していますことに気づいた場合は、行番号
Sub Sample()
Dim spRange As Range
Dim Dict As Dictionary
Dim j as long
Set spRange = Range("A1:A10")
Set Dict = New Dictionary
j = 1
For Each cell In spRange
Dict.Add j, cell.Row
j = j + 1
Next cell
Dim x As Variant
For Each x In Dict
Debug.Print Dict(x)
Next
End Sub
を取得します固有のキーを作成し、行の値を格納します。
保存された行の値を取得するには、辞書オブジェクトをループします。
今質問に戻ってください。後で
、Iは、行を取得し、最初の要素の値にアクセスする必要があります。
これは私が一種の混乱しています一部です。理由は、範囲内の特定の行の値を取得したいのであれば、spRangeなぜ辞書オブジェクトを使用していますか?
それでも辞書オブジェクトを使用したい場合は、直接、あなたは以下のコード
Sub Sample()
Dim spRange As Range
Dim Dict As Dictionary
Set spRange = Range("A1:A3")
Set Dict = New Dictionary
j = 1
For Each cell In spRange
Dict.Add j, cell.Row
j = j + 1
Next cell
Dim x As Variant
For Each x In Dict
Debug.Print spRange.Cells(Dict(x), 1).Value
Next
End Sub
を使用することができ、あなたの意図がにある場合は、このコード
Debug.print spRange.Cells(1, 1).Value
を使用して値を取得することができます範囲値を辞書に格納してから特定のキー(行番号)に基づいて値を取得すると、このコードを使用することができます
Sub Sample()
Dim spRange As Range
Dim Dict As Dictionary
Set spRange = Range("A1:A3")
Set Dict = New Dictionary
For Each cell In spRange
'~~> See how I reversed it?
Dict.Add cell.Row, cell.Text
Next cell
Dim x As Variant
For Each x In Dict
Debug.Print Dict(x)
Next
'OR
'Debug.Print Dict(2)
End Sub
今1つの最後のポイント。 Dictionaryオブジェクトをループして値を取得するのではなく、 "Debug.Print Dict(2)"のようなものを使用する予定の場合は、要素が存在するかどうかを最初に確認する余分なコードを使用することをお勧めしますそれを表示しない。例
If Dict.Exists(2) Then Debug.Print Dict(2)
HTHについて
は、ご質問があれば私に教えてください。
シド
'Row'だけの行番号です:あなたは完全な行を保存したい場合は、辞書に格納されている値を取得したい場合は、単に'辞書を使用し、 'cell.EntireRow' –
を使用しています。項目(x) 'xは行番号です。別の列に格納されている値を取得する場合は、 'Cells(x、y).Value'を使います。ここで、' x'は行番号、 'y'は列番号です。 – Cutter