ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 Office知识技巧免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 325|回复: 4

[求助] 有没有老师愿意帮助我修改代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-1-17 12:23 | 显示全部楼层 |阅读模式
老师好,

在附件中的一张工作表里,我使用了函数定位数据,但是真的太卡太慢了,所以我想用vba方式,但是因为我是纯粹的vba小白,最后发现这段vba代码无法运行,而且依然解决不了函数造成的卡顿问题

参考附件

代码如下:
  1. Private Sub Worksheet_Change(ByVal Target As Range)

  2. Dim i As Integer

  3. For i = 2 To [A1048576].End(3).Row

  4. If Cells(i, 1) <> "" Then

  5. If Sheet1.Cells(6, 10) = "US" Then Cells(i, 2) = "USD"

  6. ElseIf Sheet1.Cells(6, 10) = "CA" Then Cells(i, 2) = "CAD"

  7. ElseIf Sheet1.Cells(6, 10) = "MX" Then Cells(i, 2) = "MXN"

  8. ElseIf Sheet1.Cells(6, 10) = "JP" Then Cells(i, 2) = "JPY"

  9. ElseIf Sheet1.Cells(6, 10) = "UK" Then Cells(i, 2) = "GBP"

  10. ElseIf Sheet1.Cells(6, 10) = "DE" Or Sheet1.Cells(6, 10) = "FR" Or Sheet1.Cells(6, 10) = "IT" Or Sheet1.Cells(6, 10) = "ES" Then Cells(i, 2) = "EUR"

  11. End If

  12. Cells(i, 3) = Sheet1.Cells(6, 12)

  13. Cells(i, 4) = Sheet1.Cells(3, 10)

  14. Cells(i, 5) = "EXACT"

  15. If Sheet1.Cells(6, 16) = "展现量" Then Cells(i, 6) = Evaluate("SUMPRODUCT((保荐产品投放报告!A:A=A2)*(保荐产品投放报告!C:C=B2)*ISNUMBER(FIND(工作平台!$L$6,保荐产品投放报告!D:D))*(保荐产品投放报告!F:F=D2)*(保荐产品投放报告!G:G=E2),保荐产品投放报告!H:H)")

  16. ElseIf Cells(6, 16) = "点击量" Then Cells(i, 6) = Evaluate("SUMPRODUCT((保荐产品投放报告!A:A=A2)*(保荐产品投放报告!C:C=B2)*ISNUMBER(FIND(工作平台!$L$6,保荐产品投放报告!D:D))*(保荐产品投放报告!F:F=D2)*(保荐产品投放报告!G:G=E2),保荐产品投放报告!I:I)")

  17. ElseIf Cells(6, 16) = "CTR" Then Cells(i, 6) = Evaluate("SUMPRODUCT((保荐产品投放报告!A:A=A2)*(保荐产品投放报告!C:C=B2)*ISNUMBER(FIND(工作平台!$L$6,保荐产品投放报告!D:D))*(保荐产品投放报告!F:F=D2)*(保荐产品投放报告!G:G=E2),保荐产品投放报告!J:J)")

  18. ElseIf Cells(6, 16) = "CPC" Then Cells(i, 6) = Evaluate("SUMPRODUCT((保荐产品投放报告!A:A=A2)*(保荐产品投放报告!C:C=B2)*ISNUMBER(FIND(工作平台!$L$6,保荐产品投放报告!D:D))*(保荐产品投放报告!F:F=D2)*(保荐产品投放报告!G:G=E2),保荐产品投放报告!K:K)")

  19. ElseIf Cells(6, 16) = "广告费" Then Cells(i, 6) = Evaluate("SUMPRODUCT((保荐产品投放报告!A:A=A2)*(保荐产品投放报告!C:C=B2)*ISNUMBER(FIND(工作平台!$L$6,保荐产品投放报告!D:D))*(保荐产品投放报告!F:F=D2)*(保荐产品投放报告!G:G=E2),保荐产品投放报告!L:L)")

  20. ElseIf Cells(6, 16) = "ACoS" Then Cells(i, 6) = Evaluate("SUMPRODUCT((保荐产品投放报告!A:A=A2)*(保荐产品投放报告!C:C=B2)*ISNUMBER(FIND(工作平台!$L$6,保荐产品投放报告!D:D))*(保荐产品投放报告!F:F=D2)*(保荐产品投放报告!G:G=E2),保荐产品投放报告!M:M)")

  21. ElseIf Cells(6, 16) = "RoAS" Then Cells(i, 6) = Evaluate("SUMPRODUCT((保荐产品投放报告!A:A=A2)*(保荐产品投放报告!C:C=B2)*ISNUMBER(FIND(工作平台!$L$6,保荐产品投放报告!D:D))*(保荐产品投放报告!F:F=D2)*(保荐产品投放报告!G:G=E2),保荐产品投放报告!N:N)")

  22. ElseIf Cells(6, 16) = "订单量" Then Cells(i, 6) = Evaluate("SUMPRODUCT((保荐产品投放报告!A:A=A2)*(保荐产品投放报告!C:C=B2)*ISNUMBER(FIND(工作平台!$L$6,保荐产品投放报告!D:D))*(保荐产品投放报告!F:F=D2)*(保荐产品投放报告!G:G=E2),保荐产品投放报告!S:S)")

  23. ElseIf Cells(6, 16) = "CR" Then Cells(i, 6) = Evaluate("SUMPRODUCT((保荐产品投放报告!A:A=A2)*(保荐产品投放报告!C:C=B2)*ISNUMBER(FIND(工作平台!$L$6,保荐产品投放报告!D:D))*(保荐产品投放报告!F:F=D2)*(保荐产品投放报告!G:G=E2),保荐产品投放报告!R:R)")

  24. ElseIf Cells(6, 16) = "销售额" Then Cells(i, 6) = Evaluate("SUMPRODUCT((保荐产品投放报告!A:A=A2)*(保荐产品投放报告!C:C=B2)*ISNUMBER(FIND(工作平台!$L$6,保荐产品投放报告!D:D))*(保荐产品投放报告!F:F=D2)*(保荐产品投放报告!G:G=E2),保荐产品投放报告!U:U)")

  25. End If

  26. Else

  27. Cells(i, 2) = ""

  28. Cells(i, 3) = ""

  29. Cells(i, 4) = ""

  30. Cells(i, 5) = ""

  31. Cells(i, 6) = ""

  32. End If

  33. Next

  34. End Sub
复制代码


这段代码放在附件第3张工作表的右键代码区,我原来的设想是能够自动运行,通过vba自动填充数据

相关解释:

第3张工作表的行数是以A列进行判断的,A列有多长,BCDEF就有多少行

第3张工作表的B列要根据第1张工作表的J6进行判断,如果是US,则B列的所有行均为USD(货币单位),如果是CA,则B列所有行均为CAD...

第3张工作表的C列要根据第1张工作表的L6进行判断,C列的所有行直接等于L6

第3张工作表的D列要根据第1张工作表的J3进行判断,D列的所有行直接等于J3

第3张工作表的E列直接等于“EXACT”即可

最复杂的是F列,要根据第一张工作表的P6进行判断,并在第二张工作表中查找数据
举例:如果第一张工作表选了P6(展现量),则匹配第3张工作表的日期(对应第二张工作表的A列),货币(对应第二张工作表的C列),SKU(需要包含SKU)(对应第二张工作表的D列),关键词(对应第二张工作表的F列),匹配类型(对应第二张工作表的G列),在第二张工作表中查找到对应的展现量(对应第二张工作表的H列)
依此类推:如果第一张工作表选了P6(点击量),则匹配第3张工作表的日期(对应第二张工作表的A列),货币(对应第二张工作表的C列),SKU(需要包含SKU)(对应第二张工作表的D列),关键词(对应第二张工作表的F列),匹配类型(对应第二张工作表的G列),在第二张工作表中查找到对应的展现量(对应第二张工作表的击I列)
...
其实这里面只有两个变化,一是P6的选择,二是最后一个数据在第二张工作表所在的列

这个问题一直没有答案,非常希望有老师可以帮助

非常感谢老师

关键词趋势分析表.zip

1.5 MB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2020-1-17 14:28 来自手机 | 显示全部楼层
我手机上打开就很卡,是不是文件太大了,如果数据太多,估计是要用数据库了。图表能放到另外一个工作簿吗

TA的精华主题

TA的得分主题

发表于 2020-1-17 14:37 来自手机 | 显示全部楼层
表的B列要根据第1张工作表的J6进行判断,如果是US,则B列的所有行均为USD(货币单位),如果是CA,则B列所有行均为CAD.这种做成下拉菜单,后面 是不是 就不要对应 转换。
另外,你的分析方法,我是看不懂,你最好 把 数据来源 和 想要的 结果 表 发过来,不要超过10行数据,让别人先看明白才行啊。(那个是第一张表,那个是第三张表?)

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-17 15:15 | 显示全部楼层
zpy2 发表于 2020-1-17 14:28
我手机上打开就很卡,是不是文件太大了,如果数据太多,估计是要用数据库了。图表能放到另外一个工作簿吗

谢谢老师,已经有老师(总版主)解决了这个问题,您可以打开我另外的帖子查看总版主作品

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-17 15:16 | 显示全部楼层
zpy2 发表于 2020-1-17 14:37
表的B列要根据第1张工作表的J6进行判断,如果是US,则B列的所有行均为USD(货币单位),如果是CA,则B列所 ...

谢谢老师,已经有老师(总版主)解决了这个问题,您可以打开我另外的帖子查看总版主作品

http://club.excelhome.net/forum. ... age%3D1#pid10214647

评分

参与人数 1鲜花 +2 收起 理由
zpy2 + 2 值得肯定

查看全部评分

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

本版积分规则

关注官方微信,每天学会一个新技能

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

GMT+8, 2020-9-30 07:38 , Processed in 0.085552 second(s), 20 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2021 Wooffice Inc.

   

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

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

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