Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2083|回复: 4

[已解决]能不能改用一个字典?

[复制链接]
发表于 2015-4-15 11:03 | 显示全部楼层 |阅读模式
本帖最后由 dsfada 于 2015-4-15 13:02 编辑

Sub test()
    Dim r%, i%
    Dim arr
    Dim d As Object
    Dim d1 As Object
    Set d = CreateObject("scripting.dictionary")
    Set d1 = CreateObject("scripting.dictionary")
    With Worksheets(2)
        r = .Cells(.Rows.Count, 5).End(xlUp).Row
        arr = .Range("a5:g" & r)
        For i = 1 To UBound(arr)
            d(arr(i, 3)) = arr(i, 5)
            d1(arr(i, 3)) = arr(i, 6)
        Next
    End With
    With Worksheets(1)
        r = .Cells(.Rows.Count, 6).End(xlUp).Row
        arr = .Range("e5:h" & r)
        For i = 1 To UBound(arr)
            arr(i, 3) = d(arr(i, 1))
            arr(i, 4) = d1(arr(i, 1))
        Next
      .Range("e5").Resize(UBound(arr), UBound(arr), 2) = arr
    End With
End Sub

上面代码用两个字典,能不能改成一个字典,想学习一下?
最佳答案
2015-4-15 11:10
Sub test()
    Dim r%, i%
    Dim arr
    Dim d As Object
    Set d = CreateObject("scripting.dictionary")
    Set d1 = CreateObject("scripting.dictionary")
    With Worksheets(2)
        r = .Cells(.Rows.Count, 5).End(xlUp).Row
        arr = .Range("a5:g" & r)
        For i = 1 To UBound(arr)
            d(arr(i, 3)) = arr(i, 5) & "\\" & arr(i, 6)
        Next
    End With
    With Worksheets(1)
        r = .Cells(.Rows.Count, 6).End(xlUp).Row
        arr = .Range("e5:h" & r)
        For i = 1 To UBound(arr)
            arr(i, 3) = Split(d(arr(i, 1), "\\"))(0)
            arr(i, 4) = Split(d(arr(i, 1), "\\"))(1)
        Next
      .Range("e5").Resize(UBound(arr), UBound(arr), 2) = arr
    End With
End Sub
发表于 2015-4-15 11:10 | 显示全部楼层    本楼为最佳答案   
Sub test()
    Dim r%, i%
    Dim arr
    Dim d As Object
    Set d = CreateObject("scripting.dictionary")
    Set d1 = CreateObject("scripting.dictionary")
    With Worksheets(2)
        r = .Cells(.Rows.Count, 5).End(xlUp).Row
        arr = .Range("a5:g" & r)
        For i = 1 To UBound(arr)
            d(arr(i, 3)) = arr(i, 5) & "\\" & arr(i, 6)
        Next
    End With
    With Worksheets(1)
        r = .Cells(.Rows.Count, 6).End(xlUp).Row
        arr = .Range("e5:h" & r)
        For i = 1 To UBound(arr)
            arr(i, 3) = Split(d(arr(i, 1), "\\"))(0)
            arr(i, 4) = Split(d(arr(i, 1), "\\"))(1)
        Next
      .Range("e5").Resize(UBound(arr), UBound(arr), 2) = arr
    End With
End Sub
回复

使用道具 举报

发表于 2015-4-15 11:25 | 显示全部楼层
比如,目的是测量出体重和身高
方法1:去体重器上测体重,去身高器测身高。
方法2:在多功能器(这里的多,其实只有两种:体重和身高)上,一次测出。

如果就测两项,感觉两种方法差不多
如果要测多项,当然方法2更好


回复

使用道具 举报

发表于 2015-4-15 11:33 | 显示全部楼层
当记录足够多时,&和split的开销,说不定比单独再建一个字典的代价更大 。。。。

没测试,不知道,猜的。
回复

使用道具 举报

 楼主| 发表于 2015-4-15 13:03 | 显示全部楼层
grf1973 发表于 2015-4-15 11:10
Sub test()
    Dim r%, i%
    Dim arr

有没有别的方法?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 10:38 , Processed in 0.254728 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表