2013-11-14 60 views
0

我正在下表和Excel的幫助下工作 - 詞典 - 我試圖捕獲所有的細節 - 1)第一步是搜索「結果」列 - 如果值是「否」 - 那麼我們需要用它們適當的頭部讀取所有值。 2)所以對於第2條記錄 - 即名稱= XYZ - 我們需要存儲所有的細節。根據「主題數量」列 - 我們需要存儲所有主題的值及其相應標記 - 將用於進一步計算並生成「結果」列。Excel VBA - 詞典 - 存儲和檢索值

我得到它的部分工作 - 像我能夠捕捉到的細節 - 但無法存儲所有對象的細節和他們的標誌:

Sr. No. Results Out? Result Name Age No. of Subjects Subject Names Marks 
1   Yes   Pass ABC  21  3   Maths   10 
                  Science   26 
                  History   34 
2   No     XYZ  10  2   Maths   24 
                  Science   36 

下面是我使用的代碼,部分工作:

Public Sub test_dict() 

Dim dict As New Scripting.dictionary 
Set dict = New dictionary 

sSheetIndex = 1 
intTargetRow = 2 

Set objUsedRange = Worksheets.Item(3).UsedRange 

For Iter = 1 To objUsedRange.Columns.Count 
    sCellName = objUsedRange.Cells(1, Iter) 
    sCellValue = objUsedRange.Cells(intTargetRow, Iter) 
    dict.Item(sCellName) = sCellValue 

Next 


For i = 0 To dict.Count - 1 
    s = dict.Items()(i) 
    Debug.Print dict.Keys()(i) & " " & dict.Items()(i) 
    Debug.Print s 
Next i 

End Sub 
+2

我你的問題?爲什麼你需要一本字典?看起來你只需要使用工作表公式就可以獲得所有你需要的東西。 –

+0

@RachelHettinger - 其實我正在使用字典,因爲會有很大的否。的記錄(大約14000) - 我將不得不處理它們並將其用作另一個函數的輸入,並且它會複雜得多,因此使用字典而不是工作表公式。 我的問題是,當我使用字典代碼時,我能夠存儲所有字段的鍵值映射,除了主題和標記映射。我可能不得不使用另一個字典專門爲主題和標記 - 但不知道如何將它與第1字典關聯。 – Krishna

+0

所以你正在使用字典對象,因爲這是你需要傳遞給其他函數,對嗎?如果是這樣,那麼看看這些其他函數,看看主體/標記數據是如何傳入的。 –

回答

1

解決了與下面的代碼的問題 - 必須使用2點獨立的字典:

Public Sub test_dict() 

Dim dict As New Scripting.dictionary 
Set dict = New dictionary 

sSheetIndex = 1 
intTargetRow = 2 

Set objUsedRange = Worksheets.Item(3).UsedRange 

For Iter = 1 To objUsedRange.Columns.Count 
    sCellName = objUsedRange.Cells(1, Iter) 
    sCellValue = objUsedRange.Cells(intTargetRow, Iter) 
    dict.Item(sCellName) = sCellValue 

    If sCellName = "Subject Names" Then 
     Call test_dict_2 
    End If 

Next 

For i = 0 To dict.Count - 1 
    s = dict.Items()(i) 
    Debug.Print dict.Keys()(i) & " " & dict.Items()(i) 
    Debug.Print s 
Next i 

End Sub 



Public Sub test_dict_2() 

Dim dict_2 As New Scripting.dictionary 
Set dict_2 = New dictionary 

sSheetIndex = 1 
intTargetRow = row_counter 

Set objUsedRange = Worksheets.Item(3).UsedRange 

For Iter = 1 To objUsedRange.Columns.Count 
    sHeader = objUsedRange.Cells(1, Iter) 
    sCellValue = objUsedRange.Cells(intTargetRow, Iter) 

    If sHeader = "No. of Subjects" Then 
     mv_cnt = sCellValue 
    End If 

    If sHeader = "Subject Names" Then 

     Dim a 
     a = Iter + mv_cnt 
     For Iter_2 = Iter To (a - 1) 

      sHeader = objUsedRange.Cells(1, Iter) 
      sCellName = objUsedRange.Cells(intTargetRow, Iter) 
      sCellValue = objUsedRange.Cells(intTargetRow, Iter + 1) 
      dict_2.Item(sCellName) = sCellValue 
      intTargetRow = intTargetRow + 1 

     Next 

     intTargetRow = row_counter 

    End If 

Next 

For i = 0 To dict_2.Count - 1 
    s = dict_2.Items()(i) 
    Debug.Print dict_2.Keys()(i) & " " & dict_2.Items()(i) 
    Debug.Print s 
Next i 

Set dict_2 = Nothing 

End Sub