Excel精英培训网

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

[已解决]VB语段运行错误,求大神指教

[复制链接]
发表于 2023-4-9 18:15 | 显示全部楼层 |阅读模式
我需要在Sheet2中汇总,Sheet1的数据,条件符合Sheet2的B2到D2的时段。但不知为何这个位置出错 微信图片2.png 求大神指导

附件 测试1.zip (55.71 KB, 下载次数: 2)
发表于 2023-4-9 19:33 | 显示全部楼层
回复

使用道具 举报

发表于 2023-4-9 19:59 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zjdh 于 2023-4-9 20:01 编辑

宏稍作修改,清除了一些不必要的语句:
Sub 销售()
    Sheet2.Range("A4:F965536").ClearContents
    Dim d, d1, arr, k As Integer, n As Integer, str
    Set d = CreateObject("scripting.dictionary")
    Set d1 = CreateObject("scripting.dictionary")
    arr = Sheet1.Range("A1").CurrentRegion    '销售
    T1 = Sheet2.[B2]
    T2 = Sheet2.[D2]
    For k = 2 To UBound(arr)
        If arr(k, 5) >= T1 And arr(k, 5) <= T2 Then
            str = arr(k, 7) & "@" & arr(k, 8)
            d1(str) = d1(str) + -arr(k, 9)    '销售件数
            If Not d.exists(str) Then
                d(str) = arr(k, 8) & "|" & -arr(k, 9)    '规格/数量
            Else
                d(str) = d(str) & "、" & arr(k, 8) & "|" & -arr(k, 9)
            End If
        End If  '原来放错位置啦
    Next k
    Erase arr
    ReDim Preserve arr(1 To d1.Count, 1 To 3)
    For k = 0 To d.Count - 1
        str = Split(d.keys()(k), "@")
        n = n + 1
        arr(n, 1) = str(0)
        arr(n, 2) = d(d.keys()(k))    '规格/数量
        arr(n, 3) = d1(d1.keys()(k))    '数量
    Next k
    Sheet2.Range("A4").Resize(UBound(arr), 3) = arr
End Sub
回复

使用道具 举报

 楼主| 发表于 2023-4-10 08:56 | 显示全部楼层
zjdh 发表于 2023-4-9 19:59
宏稍作修改,清除了一些不必要的语句:
Sub 销售()
    Sheet2.Range("A4:F965536").ClearContents

十分感谢,原来是这样,怪不得运行老是有问题
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 13:23 , Processed in 0.345211 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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