2016-07-22 2 views
0

Я пытаюсь выполнить поиск со словарем. Однако я не могу извлечь offset ключа.Excel VBA + поиск с помощью словаря

Я проверил, что мой Dict загрузил все данные, которые я хочу, включая необходимое значение offset. (для следующего цикла комментариев)

Мой вопрос сейчас в том, как извлечь значение offset, когда найдено Dic.Exists(profitCentre)?

Dim cl As Range, Dic As Object 
Set Dic = CreateObject("Scripting.Dictionary"): Dic.Comparemode = vbTextCompare 
With Workbooks(wbPropListing).Sheets("Residential") 
    For Each cl In .Range("E3:E" & .Cells(Rows.Count, "E").End(xlUp).row) 
     If Not Dic.Exists(cl.Value) Then Dic.Add cl.Value, cl.Offset(, 1).Value    
    Next cl 
End With 
With Workbooks(wbPropListing).Sheets("Fund&CoT") 
    For Each cl In .Range("E2:E" & .Cells(Rows.Count, "E").End(xlUp).row) 
     If Not Dic.Exists(cl.Value) Then Dic.Add cl.Value, cl.Offset(, 1).Value 
    Next cl 
End With 

'For i = 0 To Dic.Count - 1 
' Debug.Print Dic.items()(i), Dic.keys()(i) 
'Next i 
i = 0 
For Each profitCentre In myProfitCentreArray 
    If profitCentre <> "" And Not profitCentre Like "####0000" And Dic.Exists(profitCentre) Then 
     lookupFound = Dic.items() 
    End If 
    Debug.Print "Index: " & i & " profit centre: " & profitCentre & " Lookup: " & lookupFound 
    i = i + 1 
Next profitCentre 
+0

'lookupFound = Dic (profitCentre)' –

ответ

0

Я узнал, используя vlookup вместо словаря.

Однако, если вы знаете ответ через словарь, я тоже хотел бы узнать.

Ниже приведен код, который я сделал с помощью ВПР

For Each profitCentre In myProfitCentreArray 
    If profitCentre <> "" And Not profitCentre Like "####0000" Then 
    With Workbooks(wbPropListing).Sheets("Residential") 
     Set lookupResRange = .Range("E3:F" & .Cells(Rows.Count, "E").End(xlUp).row) 
    End With 
    With Workbooks(wbPropListing).Sheets("Fund&CoT") 
     Set lookupFundRange = .Range("E2:F" & .Cells(Rows.Count, "E").End(xlUp).row) 
    End With 

    lookupResult = Application.VLookup(CStr(profitCentre), lookupResRange, 2, False) 
    If IsError(lookupResult) Then 
     lookupResult = Application.VLookup(CStr(profitCentre), lookupFundRange, 2, False) 
     If IsError(lookupResult) Then MsgBox "Profit Centre: " & profitCentre & " Not Found" 
     End If 
    myforecastSheetsIndex = myforecastSheetsIndex + 1 
    End If 
Next profitCentre 
Смежные вопросы