2012-02-22 17 views
0

vbaの新機能で、範囲内の要素をどのようにアドレス指定するのだろうか。 は、私は行を取得、後で辞書Excel vba - 範囲の要素

Set spRange = import.Range("A2:" & spRange.End(xlDown).Address) 
    For Each cell In spRange 
     dict.Add cell.Offset(0, 2).Text, cell.Row 

Next cell 

するためのIDで索引付けのセル(行)の範囲を追加し、最初の要素の値にアクセスする必要があります。

For Each x In dict 
     Set spRange = dict.Item(x) 
     'how to get value of first element of spRange 
Next 

私は間違っていないよ場合は、最初に来た、:-)

おかげ

+1

'Row'だけの行番号です:あなたは完全な行を保存したい場合は、辞書に格納されている値を取得したい場合は、単に'辞書を使用し、 'cell.EntireRow' –

+1

を使用しています。項目(x) 'xは行番号です。別の列に格納されている値を取得する場合は、 'Cells(x、y).Value'を使います。ここで、' x'は行番号、 'y'は列番号です。 – Cutter

答えて

3

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について

は、ご質問があれば私に教えてください。

シド