ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 程序开发] 【84期】特殊拆分工作表—拆分工作表数据到工作簿或Access数据库

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-12-1 21:25 | 显示全部楼层
本帖最后由 wpxxsyzx 于 2011-12-10 13:52 编辑

三种方法写到一个工作簿了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-2 23:34 | 显示全部楼层
本帖最后由 ExcelHome 于 2012-10-6 17:11 编辑

上附件,里面有三个工作表,分别是转到ACCESS的,转到工作薄的。
转到工作蒲中的去除重复项07支持,03只好用高级筛选了。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-5 08:53 | 显示全部楼层
再交一个,只为不失分。也不知道犯规了没有

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-5 12:15 | 显示全部楼层
本帖最后由 onthetrip2008 于 2011-12-5 22:06 编辑

年底了,事情多,有空再试试用普通方法以及access能否做出来。
-------------------------------------------------
在EH学到了很多知识,新年快到了,在这里感谢EH各位坛友和老师,提前祝各位新年快乐,更上一层楼。
---------
修改了一下,重新上传

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-6 00:26 | 显示全部楼层
本帖最后由 wcymiss 于 2011-12-6 15:41 编辑


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-12-22 14:37 | 显示全部楼层
zhaogang1960 发表于 2011-12-22 13:37
没有追究重发,是算法违反了“常规法和ADO法不得混用”的规定:
    If Dir(sPath & WbName) = "" Then
...

其实版主已经宽宏大量了,AOD法贴上去。就提示我犯规了。
后来查了下能用into添加表和工作簿的。后来也不好意思改了。
就是常规法 扣了一分实属自己不严谨。加个日期排序就完善了。
就是我太想3分了。以后努力

TA的精华主题

TA的得分主题

发表于 2011-12-22 14:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
接上
当时觉得:哎哟,难点出来了。
于是仔细研究数据源2.xls的数据规律,结合赵版的题目要求(以送货单位商品编号为关键字,如果有重复,按照日期字段只取最新的一个纪录)
日期
送货单位
商品编号
商品名称
单位
单价
数量
金额
2011 10 19
D公司
0284
家乐菌菇汁
12.00
111.00
1332.00
2011 10 31
A公司
0284
家乐菌菇汁
24.00
123.00
2952.00
2011 11 19
D公司
0284
家乐菌菇汁
12.00
111.00
1332.00
2011 11 22
A公司
0284
家乐菌菇汁
15.00
114.00
1710.00
2011 11 25
A公司
0284
家乐菌菇汁
18.00
117.00
2106.00
2011 11 28
A公司
0284
家乐菌菇汁
21.00
120.00
2520.00
2011 12 1
A公司
0284
家乐菌菇汁
24.00
123.00
2952.00

判断出是以送货单位为关键字,与上行数据的送货单位做比较,不重复的保留,重复的取最大日期的记录;
得出难点在如何剔除数据源2.xls中红色部分的数据。
当时心想:哇,难,这题目有深度,不愧是竞赛题,用常规法不是很难,难在用ADO法去解决,心想既然是竞赛题,那就挑战难的吧,说不定能获得赵版所说的 精彩答案另加分。
(不信你试着做做用ADO法读取数据源2.xls得到表效果二)
苦苦思索,不断测试,终于想到用错位序号解决与上行数据做比对去重复的难题,如下:
‘================================================
'为符合条件的数据加上序号,1为起始数
Sql = "Select b.日期,b.送货单位,b.商品编号,(Select count(1) from [Sheet1$]as a Where a.商品编号=b.商品编号 and a.日期<=b.日期 ) as 排名 from [Sheet1$] as b Where 商品编号='0284'"
'为符合条件的数据加上错位序号,2为起始数
Sql1 = "Select b.日期,b.送货单位,b.商品编号,(Select count(1)+1 from [Sheet1$]as a Where a.商品编号=b.商品编号 and a.日期<=b.日期 ) as 排名 from [Sheet1$] as b Where 商品编号='0284'"
'利用错位序号,得出要剔除的日期
Sql = "Select b.日期 from (" & Sql & ") as a Left Join (" & Sql1 & ") as b on a.排名=b.排名 and a.送货单位=b.送货单位"
'去除空值
Sql = "Select * from (" & Sql & ") Where 日期 is not null "
'得出最终结果
Sql = "Select a.* from [Sheet1$] as a Left Join (" & Sql & ") as b on a.日期=b.日期  Where b.日期 is null and 商品编号='0284'"
'把最终结果写入相应文件
Sql = "Select *  into [Excel 8.0;Database=" & FilesPath & "记录2.xls].[0284] FROM (" & Sql & ")"
'执行
Cnn.Execute (Sql)
‘================================================
做完后有点沾沾自喜的感觉,威严的想到:蛮难的,不过我还是做出来了,咳,关于那个精彩答案另加分¥@%@……@#
谁知事实情况是: 你知道的。
在赵版公布得分结果,未公布答案时,
我一头雾水:将参赛选手的代码一一测试了一遍,他们没有完成读取数据源2.xls得到表效果二的效果呀?(常规法除外),只有我一人做出了这种效果,技术水平又上升了?还是自作多情了?
到赵版公布答案,汗了,没有技术上升,是自作多情了,把问题想复杂了。
昨晚赵版发我的消息:
谢谢答题,对判断纪录工作簿是否存在,如果不存在就新建一个理解不正确,如果存在则不需要删除,结果只能有一个纪录工作簿
额,对于这个我不郁闷,条件判断没写好,因为这不是技术难点,郁闷的是自以为完成了用ADO法得到以送货单位为关键字,与上行数据的送货单位做比较,不重复的保留,重复的取最大日期的记录的技术难点,事实却是驴唇不对马嘴,严重审题不清
求安慰这个,有没有安慰技术分一说 ##$!@$$@%^$#&^&hehe.
请以我为戒,那个审题啊要正确。
感谢赵版带来如此精彩的题目与答案。
期待下一期。
另:感谢赵版帮我删除了重复粘贴的代码,帖子发完了我就没敢修改,怕违规,hehe。感谢!

TA的精华主题

TA的得分主题

发表于 2011-12-22 14:23 | 显示全部楼层
兄弟姐妹们,我冤啊,好不好。
严重审题不清,我以为是这样:
以商品编号0284 为例
代码读取数据源1.xls 应该得到 记录(新建时执行数据源1效果).xls 这样的效果,如下表:
日期
送货单位
商品编号
商品名称
单位
单价
数量
金额
2011 10 19
D公司
0284
家乐菌菇汁
12
111
1332
2011 10 31
A公司
0284
家乐菌菇汁
24
123
2952

(表效果一)
代码读取数据源2.xls 应该得到记录2(执行数据源2效果).xls 这样的效果,如下表:
日期
送货单位
商品编号
商品名称
单位
单价
数量
金额
2011 10 19
D公司
0284
家乐菌菇汁
12
111
1332
2011 10 31
A公司
0284
家乐菌菇汁
24
123
2952
2011 11 19
D公司
0284
家乐菌菇汁
12
111
1332
2011 12 1
A公司
0284
家乐菌菇汁
24
123
2952

(表效果二)
没有想到是新建及追加记录,而是以为分别读取2个数据源文件分别得到各自的记录文件
按着我这样的思路往下继续,
当我用代码   
arr = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Cnn.Execute("Select Distinct 商品编号 from [Sheet1$]").GetRows))
For i = 1 To UBound(arr)
Sql = "Select *  into [Excel 8.0;Database=" & FilesPath & "记录.xls].[" & arr(i) & "] FROM [Sheet1$] where 日期 in(Select Max(日期) as 日期 from [Sheet1$] Group by 送货单位)  and 商品编号='" & arr(i) & "' "
Cnn.Execute (Sql)
Next
去读取数据源1.xls的时候, 得到正确效果,如(表效果一),当时觉得:还可以,不是很难吗。这次可以灌到点技术分了。
但读取数据源2.xls的时候,得出的却是下表
日期
送货单位
商品编号
商品名称
单位
单价
数量
金额
2011 11 19
D公司
0284
家乐菌菇汁
12
111
1332
2011 12 1
A公司
0284
家乐菌菇汁
24
123
2952

没有获得(表效果二)的效果。
下续

TA的精华主题

TA的得分主题

发表于 2011-12-22 11:52 | 显示全部楼层
原来直接select into 就可以新建工作簿和工作表,学习了。

TA的精华主题

TA的得分主题

发表于 2011-12-22 13:30 | 显示全部楼层
常规法 我是有点不妥。加个按日期排序代码就妥当了。其实我做的时候就想到了,哎为这扣了一分。我想答案对就完事了。
SQL法犯规了。无话可说。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-4 01:32 , Processed in 0.049373 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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