2013-11-14 73 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