ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 我要把一个工作表中的数据无重复添加到另一个工作表中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-1-28 00:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 蒙蒙烟雪 于 2015-1-28 00:27 编辑

这几天在学ADO, 试着写了下, 貌似速度不咋地 (想不出怎么一次性提取字段证券代码,只好掺杂一个字典, 巨汗 - -||| ) 附表.rar (114.98 KB, 下载次数: 10)
  1. Sub test()
  2. tt = Timer
  3. Sheet3.UsedRange.Offset(1, 0).ClearContents
  4. Sheet1.[f:f].Replace "万元", ""
  5. Dim conn As Object, SQL$, MyFile$, rs As Object, PVDR$
  6. Dim d As Object, Arr, r&, n&
  7. Set d = CreateObject("scripting.dictionary")
  8. Set conn = CreateObject("ADODB.Connection")
  9. Set rs = CreateObject("ADODB.Recordset")
  10. If Application.Version = "11.0" Then
  11.     PVDR = "Provider=Microsoft.JET.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source="
  12. Else
  13.     PVDR = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source="
  14. End If
  15. MyFile = ThisWorkbook.FullName
  16. SQL = "SELECT """",证券名称,SUM(IIF(异动类型='大额买单',单笔成交,0)) AS 大额买和,SUM(IIF(异动类型='大额卖单',单笔成交,0)) AS 大额卖和,"""","""",Max(IIF(异动类型='大额买单',单笔成交,0)) AS 最大买单,Max(IIF(异动类型='大额卖单',单笔成交,0)) AS 最大卖单 FROM [Sheet1$A1:F] GROUP BY 证券名称"
  17. conn.Open PVDR & MyFile
  18. Set rs = conn.Execute(SQL)
  19. Sheet3.[A2].CopyFromRecordset rs
  20. conn.Close
  21. Set conn = Nothing
  22. n = Sheet3.Cells(Rows.Count, 2).End(xlUp).Row
  23. Arr = Sheet1.[a1].CurrentRegion
  24. For r = 2 To UBound(Arr)
  25.     d(Arr(r, 3)) = Arr(r, 2)
  26. Next
  27. For r = 2 To n
  28.     Cells(r, 1) = d(Cells(r, 2).Value)
  29. Next
  30. Set d = Nothing
  31. Range("e2:e" & n).FormulaR1C1 = "=rc[-2]-rc[-1]"
  32. Range("f2:f" & n).FormulaR1C1 = "=rc[-3]/rc[-2]"
  33. [f:f].SpecialCells(xlCellTypeFormulas, 16) = "无大卖单"
  34. MsgBox Timer - tt
  35. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-28 00:09 | 显示全部楼层
    有感于各位的关注特别是“Vicel”及“guaxiaodai11”的热情帮助,还借用了其他一些老师的代码,把我在论坛中的学习成果分享一下,也许对有些朋友会有所帮助!喝水不忘挖井人!基于对附件大小的限制,我删除了大部分数据,但下载后可以通过代码重新下载生成。里面肯定还有不少瑕疵,其中就包括我在28楼所说的问题,还有“凤凰市场雷达导入”中也运用的大量的公式和格式,以致体量有点大,运行速度还是不尽如人意。特别说明:“深沪A股20150116”为“凤凰市场雷达导入”中的公式源文件,“凤凰市场雷达导入”中含公式部分只保留了前三行。

深沪A股20150116.rar

564.96 KB, 下载次数: 13

凤凰市场雷达导入.rar

265.99 KB, 下载次数: 19

附表1.rar

124.69 KB, 下载次数: 21

TA的精华主题

TA的得分主题

发表于 2015-1-28 00:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hqmtba 发表于 2015-1-27 23:26
这个我注意到了,不应该一致的,是吧!

我的意思是代码放到你自己的工作簿里时,要注意工作表名与代码里的是否相应

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-28 00:11 | 显示全部楼层
    研究得有点着迷了,但是该休息了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-28 11:17 | 显示全部楼层
Vicel 发表于 2015-1-28 00:03

非常感谢您的帮助,完全达到了我得要求!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-28 16:19 | 显示全部楼层
本帖最后由 hqmtba 于 2015-1-28 16:28 编辑
Vicel 发表于 2015-1-28 00:03


      又有个小问题,我研究了半天还是没辙,需要帮忙,就是Sheet1的H列—L列,在导入数据前没有把第一行以下数据清空,导致本次运行后,还残留上次的一部分数据(上次总行数比本次总行数多出的那部分行数),具体请参照插图,13683行以下的数据为上次的残留。
截图.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-28 16:35 | 显示全部楼层
Vicel 发表于 2015-1-28 00:05
我的意思是代码放到你自己的工作簿里时,要注意工作表名与代码里的是否相应

      明白

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-28 16:44 | 显示全部楼层
      像"Vicel”老师一样的热情和耐心是我深入学习Excel的强大动力,实际上我还有好多问题,就是觉得不好意思花费老师们的太多时间精力,还是想先自己琢磨,实在不行再向老师请教,这样自己也能学得更多和更扎实,也有利于消化已经知道的一些东西!也请老师到时不吝赐教!

TA的精华主题

TA的得分主题

发表于 2015-1-28 18:27 | 显示全部楼层
hqmtba 发表于 2015-1-28 16:19
又有个小问题,我研究了半天还是没辙,需要帮忙,就是Sheet1的H列—L列,在导入数据前没有把第一 ...

你sheet1导入数据前,用usedrange.offset(1,0).clearcontents把除标题行以外的数据先清除掉

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-28 20:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 hqmtba 于 2015-1-28 20:49 编辑
Vicel 发表于 2015-1-28 18:27
你sheet1导入数据前,用usedrange.offset(1,0).clearcontents把除标题行以外的数据先清除掉


      已解决,原来总想着在您给得代码里加入清除单元格的内容,总成功不了,在您的提示之下,在运行您的代码前做清除。但可不可以这样说:“Sheets("Sheet1").Range("A2:L65536").ClearContents”会比“Sheets("Sheet1").usedrange.offset(1,0).clearcontents”的效率高些?当然前提是我只需要清除A-L列的内容。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 01:28 , Processed in 0.040432 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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