2012-02-22 5 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 

그것은 U 매우 쉬울 수 있지만 먼저 잘못했다 내가 아니라고하면 내가,

감사

+1

는'Row'은 행 번호입니다 : 당신이 전체 행을 저장하려면 단순히'DICT를 사용하여 사전에 저장된 값을 검색 할 경우'cell.EntireRow' –

+1

를 사용합니다. Item (x)''x'는 행 번호입니다. 다른 열에 저장된 값을 검색하려면'Cells (x, y) .Value'를 사용하십시오. 여기서'x'는 행 번호이고'y'는 열 번호입니다. – Cutter

답변

3

bsreekanth

사전 객체 :-) API에 익숙하지 않다 1996 년에 VB Script 2의 일부로 다시 돌아가서 나중에 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 

를 검색 고유 키를 저장 한 다음 행 값을 저장합니다.

저장된 행 값을 검색하려면 사전 객체를 반복합니다.

지금 다시 질문하기. 나중에

, 나는 행을 검색하고, 첫 번째 요소의 값에 액세스해야합니다.

이 내가 가지 혼란 스러워요 부분입니다. 이유는, 범위의 특정 행의 값을 얻으려는 경우입니다. 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 

마지막 한 점. 사전 개체를 통해 루프를 사용하여 값을 검색하지는 않지만 "Debug.Print Dict (2)"와 같은 것을 사용할 계획이라면 요소가 있는지 또는 요소가 있는지 먼저 확인하는 추가 코드를 사용하는 것이 좋습니다. 그리고 그것을 보여주지 않습니다. 예를

If Dict.Exists(2) Then Debug.Print Dict(2) 

HTH를 들어

당신이 어떤 질문이 있으면 알려주세요.

시드