ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: nouce

[求助] VBA统计最大值并且显示日期

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-27 20:07 | 显示全部楼层
准提部林 发表于 2023-3-27 16:38
1) 源資料...非必要..不去動它, 排序了就不是原樣
2) 字典的key最好定義型態, 可考慮都轉為文本, 速度可 ...

说的极对,我想的是排序应该不会影响源数据,你的第4点确实是,因为不用循环这么多,可以提高效率不少了,如果楼主不介意排序的话,我的代码再改一改,应该速度都要比上面的同志要快,当然了速度不是最终的

TA的精华主题

TA的得分主题

发表于 2023-3-27 20:26 | 显示全部楼层
洋务德雷 发表于 2023-3-26 16:15
我这个简单,不用循环也可以解决。看看吧
  1. Sub summery()
  2.     Dim conn As Object, rst As Object, strSQL$, i&, PathStr$, sht As Worksheet
  3.     Set conn = CreateObject("ADODB.Connection")
  4.     Set rst = CreateObject("ADODB.Recordset")
  5.     PathStr = ThisWorkbook.FullName                                                       '路径
  6.     Select Case Application.Version * 1
  7.         Case Is <= 11
  8.             conn.Open "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" & PathStr & ";Extended Properties='Excel 8.0;HDR=YES;IMEX=0'"
  9.         Case Is >= 12
  10.             conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties='Excel 12.0;HDR=YES;IMEX=0'"
  11.     End Select
  12.     strSQL = "SELECT 品项编码,max(CDate(Format(单据日期, '####/##/##'))) as 日期  FROM [明细$] group by 品项编码"
  13.     strSQL = "select a.品项编码,b.品项名称,b.规格,b.单位,a.日期,b.不含税单价 from (" & strSQL & ")a left join [明细$]b on b.品项编码=a.品项编码 and CDate(Format(b.单据日期, '####/##/##'))=a.日期"
  14.     rst.Open strSQL, conn, 1, 3
  15.       '替换为对结果的处理-------------------------------------
  16.     With Worksheets("统计")
  17.         .Range("a2").CopyFromRecordset rst
  18.     End With
  19.      conn.Close:    Set conn = Nothing:    Set rst = Nothing
  20. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-3-27 21:00 | 显示全部楼层
本帖最后由 lizhipei78 于 2023-3-27 21:02 编辑
nouce 发表于 2023-3-27 14:26
运行出错了
.Range([a1], .End(3)).Sort key1:=.Range("d1"), order1:=xlAscending, key2:=.Range("b1" ...

统计最新报价优化.rar (23.41 KB, 下载次数: 4)

你试一下这个,你那个不是规范日期,建议以后少用这种,我分列成日期了,是为了得到最后的日期
这个代码我是增加了一个辅助列对日期进行排序,没有对你的表格日期那一列进行操作,没有什么影响,就是排序了一下,你表格本身有序号排序,如果不喜欢我的倒序排序,你按你的序号进行排序就会变成你原来的样子了
相信我,用我这个肯定比其他人的要快。


TA的精华主题

TA的得分主题

发表于 2023-3-27 21:05 | 显示全部楼层
nouce 发表于 2023-3-27 14:26
运行出错了
.Range([a1], .End(3)).Sort key1:=.Range("d1"), order1:=xlAscending, key2:=.Range("b1" ...

统计最新报价优化.rar (23.41 KB, 下载次数: 8)

你那个不是规范的日期,建议以后少用
我这个代码添加了一个辅助列,复制你日期那一列,不会对你的原表进行操作,因为你表格本身是有排序的,所以我这个新排序对你表格没有什么影响,后面你可以根据你的序号进行排序就好了
相信我,我这个比其他人的都要快,特别是几万条数据的话。

TA的精华主题

TA的得分主题

发表于 2023-3-28 10:12 | 显示全部楼层
7樓代碼, 改成"單條件(品项编码)比對//
基本就兩個判斷...試試//
Xl0000002.rar (44.6 KB, 下载次数: 11)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-28 17:40 | 显示全部楼层
lizhipei78 发表于 2023-3-27 21:00
你试一下这个,你那个不是规范日期,建议以后少用这种,我分列成日期了,是为了得到最后的日期
这个 ...

运行时错误“6”
溢出

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-28 17:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
准提部林 发表于 2023-3-28 10:12
7樓代碼, 改成"單條件(品项编码)比對//
基本就兩個判斷...試試//

目前把代码放到原表里测试成功的这些代码中,你这个是运行速度最快的了,时间为0.15625,还有一个用SQL写的,也很快,时间为0.9296875

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-28 18:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
准提部林 发表于 2023-3-28 10:12
7樓代碼, 改成"單條件(品项编码)比對//
基本就兩個判斷...試試//

不过你这个有点没看懂,能不能解释一下?

TA的精华主题

TA的得分主题

发表于 2023-3-28 18:25 | 显示全部楼层
nouce 发表于 2023-3-28 17:40
运行时错误“6”
溢出

微信截图_20230328181504.png


这里你分开写试试看
我这里测试是完全没有问题的,我用的是WPS
我也用微软OFFICE 2016测试过了,说实话在VBA代码运行速度上,WPS最新版要比微软OFFICE要好

TA的精华主题

TA的得分主题

发表于 2023-3-28 18:53 | 显示全部楼层
nouce 发表于 2023-3-28 18:13
不过你这个有点没看懂,能不能解释一下?

上圖//

xx001.gif
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 09:51 , Processed in 0.052583 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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