Excel精英培训网

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

[已解决]求助下棋法增加日期识别后的分类汇总代码优化

[复制链接]
发表于 2017-8-22 07:39 | 显示全部楼层 |阅读模式
本帖最后由 明日之星 于 2017-8-22 16:52 编辑

求助下棋法增加日期识别条件.zip (32.08 KB, 下载次数: 5)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-8-22 09:11 | 显示全部楼层
  1. Sub tongji()
  2. Dim brr(1 To 10000, 1 To 3)
  3. Dim r
  4. Dim arr, x As Integer, sr As String, k As Integer
  5. Dim d As New Dictionary
  6. Dim dst As Date, dfh As Date
  7. arr = Sheets("sheet1").Range("c4:m" & Sheets("sheet1").Range("c65536").End(xlUp).Row)
  8. If [k3] <> "" And [l3] <> "" Then
  9.   dst = [k3]: dfh = [l3]
  10.   For x = 1 To UBound(arr)
  11.     If arr(x, 1) >= dst And arr(x, 1) <= dfh Then
  12.       sr = arr(x, 9) & "-" & arr(x, 10)
  13.       If d.Exists(sr) Then
  14.         r = d(sr)
  15.         brr(r, 3) = brr(r, 3) + arr(x, 11)
  16.       Else
  17.         k = k + 1
  18.         d(sr) = k
  19.         brr(k, 1) = arr(x, 9)
  20.         brr(k, 2) = arr(x, 10)
  21.         brr(k, 3) = arr(x, 11)
  22.       End If
  23.     End If
  24.   Next x
  25. End If
  26. Sheets("sheet2").Range("b3").Resize(k, 3) = brr
  27. Set Rng = Sheets("sheet2").Range("b2:d60")
  28. Rng.Borders.LineStyle = xlContinuous
  29. Sheets("sheet2").Range("B3:D" & Sheets("sheet2").Range("d65536").End(xlUp).Row).Sort key1:=Sheets("sheet2").Range("D2"), order1:=xlDescending
  30. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
明日之星 + 1 赞一个

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-8-22 09:29 | 显示全部楼层

微信图片_20170822092825.png    代码执行后报错,请大神帮忙诊断是什么原因,谢谢!
回复

使用道具 举报

发表于 2017-8-22 09:47 | 显示全部楼层
  1. Sub tongji()
  2. Dim brr(1 To 10000, 1 To 3)
  3. Dim r
  4. Dim arr, x As Integer, sr As String, k As Integer
  5. Dim d As New Dictionary
  6. Dim dst As Date, dfh As Date, b As Boolean
  7. arr = Sheets("sheet1").Range("c4:m" & Sheets("sheet1").Range("c65536").End(xlUp).Row)
  8. If [k3] <> "" And [l3] <> "" Then b = True: dst = [k3]: dfh = [l3]
  9. For x = 1 To UBound(arr)
  10.   If (arr(x, 1) >= dst And arr(x, 1) <= dfh) Or b = False Then
  11.     sr = arr(x, 9) & "-" & arr(x, 10)
  12.     If d.Exists(sr) Then
  13.       r = d(sr)
  14.       brr(r, 3) = brr(r, 3) + arr(x, 11)
  15.     Else
  16.       k = k + 1
  17.       d(sr) = k
  18.       brr(k, 1) = arr(x, 9)
  19.       brr(k, 2) = arr(x, 10)
  20.       brr(k, 3) = arr(x, 11)
  21.     End If
  22.   End If
  23. Next x
  24. Sheets("sheet2").Range("b3").Resize(k, 3) = brr
  25. Set Rng = Sheets("sheet2").Range("b2:d60")
  26. Rng.Borders.LineStyle = xlContinuous
  27. Sheets("sheet2").Range("B3:D" & Sheets("sheet2").Range("d65536").End(xlUp).Row).Sort key1:=Sheets("sheet2").Range("D2"), order1:=xlDescending
  28. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
明日之星 + 1 赞一个

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-8-22 09:55 | 显示全部楼层
回复

使用道具 举报

发表于 2017-8-22 10:33 | 显示全部楼层    本楼为最佳答案   
我这边运行OK,附件请测试。
如果按日期范围,没有筛选出数据的话也会报错,因为我没有做这个处理,但是错误不会出现在你标出的那一行,如果可以的话请上传出错的附件。

test.zip

30.74 KB, 下载次数: 9

评分

参与人数 1 +1 收起 理由
明日之星 + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-8-22 12:52 | 显示全部楼层
大灰狼1976 发表于 2017-8-22 10:33
我这边运行OK,附件请测试。
如果按日期范围,没有筛选出数据的话也会报错,因为我没有做这个处理,但是错 ...

感谢帮助,附件代码执行后不报错了,但输上起止日期跟没输起止日期出来的结果是一样的,谢谢!
回复

使用道具 举报

发表于 2017-8-22 13:10 | 显示全部楼层
明日之星 发表于 2017-8-22 12:52
感谢帮助,附件代码执行后不报错了,但输上起止日期跟没输起止日期出来的结果是一样的,谢谢!

因为你源数据里面只有2017/8/14一天的数据,你可以改下试试,我都试过了。

评分

参与人数 1 +1 收起 理由
明日之星 + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-8-22 14:10 | 显示全部楼层
大灰狼1976 发表于 2017-8-22 13:10
因为你源数据里面只有2017/8/14一天的数据,你可以改下试试,我都试过了。

test.zip (31.26 KB, 下载次数: 2)
TIM图片20170822135556.png
TIM图片20170822135639.png
TIM图片20170822135726.png
回复

使用道具 举报

发表于 2017-8-22 14:25 | 显示全部楼层
测试没问题,你贴的图上就能看到,第二行产品切换数据已经变了。

评分

参与人数 1 +1 收起 理由
明日之星 + 1 很给力

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 00:35 , Processed in 0.646619 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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