vim_vim 2025-01-03 14:34 采纳率: 0%
浏览 3

如何读出这个字典中的值?

测试数据如下:

code    number
A10101    1000
A10102    230
A10103    200
A10201    7500
A10202    2340
A10203    3710

这个函数可以将两列作为一个range,然后赋值给dictionary:

Function RangeToDict2(ByVal R As Range) As dictionary
    Set RangeToDict2 = New dictionary
    i = 1
    Do Until i >= (R.Rows.Count * R.Columns.Count)
        RangeToDict2.Add R(i), R(i + 1)
        i = i + 2
      Loop
End Function

读出这个字典

Sub test()
    Dim rng As Range
    Dim kc As dictionary
    Set rng = ActiveWorkbook.Worksheets(1).Range("a2:b7")
    Set kc = RangeToDict2(rng)
    Dim key As Variant
    For Each key In kc.Keys
        Debug.Print key, kc(key)
    Next key
    Debug.Print "ok", kc("A10101")
End Sub

结果:

A10101         1000 
A10102         230 
A10103         200 
A10201         7500 
A10202         2340 
A10203         3710 
ok 

为何这行的 Debug.Print "ok", kc("A10101"),其中kc("A10101")没有1000,作为结果输出呢?
将最后一句Debug.Print "ok", kc("A10101") 修改成 Debug.Print kc("A10101") 也没有1000作为结果输出。

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间 优质创作者: Java、后端开发技术领域 2025-01-03 14:35
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    在这段代码中,RangeToDict2函数在将两列数据转换成一个dictionary时,实际上是将第一列的值作为key,第二列的值作为value,存储到dictionary中。因此,在输出结果时,通过key来获取对应的value。 在这里,“Debug.Print ‘ok’, kc(‘A10101’)”这行代码中,实际上是想要输出字典中key为“A10101”的值,即1000。然而,在这段代码中,由于在RangeToDict2函数中将第一列数据作为key,第二列数据作为value存储到dictionary中,因此在输出时应该使用“Debug.Print kc(‘A10101’)”来获取对应的值,而不需要额外输出“ok”这个字符串。 因此需要将最后一行代码修改为“Debug.Print kc(‘A10101’)”,这样将会正确输出对应key为“A10101”的值1000。
    评论

报告相同问题?

问题事件

  • 创建了问题 1月3日