ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请高手进来,感谢

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-18 06:39 | 显示全部楼层
吴中泉 发表于 2023-5-17 21:53
问题一问题二的代码都在附件里,请测试

吴老师,您好!
测试了一下问题二,发现有个小问题,如下:
1、把数据复制过来的时候,文本型的数值转变成了数值型,存在000789,转变后变为789
2、工作表“问题二-源数据”的a(i,1 to 2)没有工作表“问题二”中的b(i,1 to 2)多,就是说有些内容在源数据中是没有的。导致数据对应错误

感谢您的支持!

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-18 06:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

数据比较多,函数运行起来很慢,所以想用vba

TA的精华主题

TA的得分主题

发表于 2023-5-18 10:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 sheeboard 于 2023-5-18 12:51 编辑

用pandas参考
  1. import pandas as pd
  2. df1=pd.read_excel("说明.xlsm",sheet_name=1)
  3. df2=pd.read_excel("说明.xlsm",sheet_name=3)
  4. target=pd.read_excel("说明.xlsm",sheet_name=2)
  5. #问题1
  6. df1.groupby(['公司','产品']).agg({'起始时间':'min','结束时间':'max'})
  7. #问题2
  8. target=target[['公司','产品']]
  9. pd.merge(target,df2,on=['公司','产品'],how='left')
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-18 12:30 | 显示全部楼层
sheeboard 发表于 2023-5-18 10:15
用pandas参考
[/code]import pandas as pd
df1=pd.read_excel("说明.xlsm",sheet_name=1)

不会玩这个

TA的精华主题

TA的得分主题

发表于 2023-5-18 16:56 | 显示全部楼层
taizhoexcelhome 发表于 2023-5-18 06:39
吴老师,您好!
测试了一下问题二,发现有个小问题,如下:
1、把数据复制过来的时候,文本型的数值转 ...

你好,今天有事去了,现在才看帖子.
代码运行速度怎样?
第二个问题,由于你给的数据量太少,可能我算法考虑欠缺.我编的时候考虑你的意思,不就是说"问题二"表的前两列数据在问题二源程序里有的,就把相应的后三列数据复制到问题表的对应行里吗?
这是你的原话:根据工作表”问题二“中的公司和产品名称对应工作表”问题二-源数据“,获取对应的规格、价格、起始时间等信息.
你最好再多发一些问题二的模拟数据给我,我调试一下.

TA的精华主题

TA的得分主题

发表于 2023-5-18 17:21 | 显示全部楼层
taizhoexcelhome 发表于 2023-5-18 06:39
吴老师,您好!
测试了一下问题二,发现有个小问题,如下:
1、把数据复制过来的时候,文本型的数值转 ...


修改好了,简单测试了一下,符合你的意思,你再测试一下
image.jpg

TA的精华主题

TA的得分主题

发表于 2023-5-18 17:23 | 显示全部楼层
  1. Sub test()
  2. Dim d, ar, br
  3. Set d = CreateObject("Scripting.Dictionary")
  4. ar = Sheets("问题二-源数据").Range("a1").CurrentRegion
  5. For i = 2 To UBound(ar)
  6.     s = ar(i, 1) & ar(i, 2)
  7.     d(s) = i
  8. Next
  9. Sheets("问题二").Range("c2:e50000").ClearContents
  10. br = Sheets("问题二").Range("a1").CurrentRegion.Value
  11. r = 1
  12. For i = 1 To UBound(br)
  13.     s = br(i, 1) & br(i, 2)
  14.     If d.exists(s) Then
  15.         For j = 3 To UBound(br, 2)
  16.             br(i, j) = ar(d(s), j)
  17.         Next
  18.     End If
  19. Next
  20. Sheets("问题二").Range("a1").CurrentRegion = br
  21. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-5-18 17:41 来自手机 | 显示全部楼层
  1. Sub FillData()
  2.     Dim conn As Object
  3.     Dim rs As Object
  4.     Dim sql As String

  5.     Set conn = CreateObject("ADODB.Connection")
  6.     conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
  7.    
  8.     sql = "select ,,min(),max() from [$] group by ,"
  9.     Set rs = conn.Execute(sql)
  10.     Sheets("").Range("A2").CopyFromRecordset rs
  11.    
  12.     sql = "select a.,a.,b.,b.,b. from [$] as a left join (select * from [-$]) as b  " _
  13.         & " on a.=b. and a.=b. "
  14.     Set rs = conn.Execute(sql)
  15.     Sheets("").Range("A2").CopyFromRecordset rs
  16.    
  17.     '
  18.     Sheets("").Columns("E").NumberFormat = "yyyy-mm-dd"
  19.     '
  20.     rs.Close
  21.     Set rs = Nothing
  22.     conn.Close
  23.     Set conn = Nothing
  24. End Sub


复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-18 22:54 | 显示全部楼层

刚看到信息,测试过了,速度很快,程序是正确的,感谢支持

TA的精华主题

TA的得分主题

发表于 2023-5-19 10:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 09:35 , Processed in 0.045394 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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