|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
老师好,
在附件中的一张工作表里,我使用了函数定位数据,但是真的太卡太慢了,所以我想用vba方式,但是因为我是纯粹的vba小白,最后发现这段vba代码无法运行,而且依然解决不了函数造成的卡顿问题
参考附件
代码如下:
- Private Sub Worksheet_Change(ByVal Target As Range)
- Dim i As Integer
- For i = 2 To [A1048576].End(3).Row
- If Cells(i, 1) <> "" Then
- If Sheet1.Cells(6, 10) = "US" Then Cells(i, 2) = "USD"
- ElseIf Sheet1.Cells(6, 10) = "CA" Then Cells(i, 2) = "CAD"
- ElseIf Sheet1.Cells(6, 10) = "MX" Then Cells(i, 2) = "MXN"
- ElseIf Sheet1.Cells(6, 10) = "JP" Then Cells(i, 2) = "JPY"
- ElseIf Sheet1.Cells(6, 10) = "UK" Then Cells(i, 2) = "GBP"
- 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"
- End If
- Cells(i, 3) = Sheet1.Cells(6, 12)
- Cells(i, 4) = Sheet1.Cells(3, 10)
- Cells(i, 5) = "EXACT"
- 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)")
- 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)")
- 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)")
- 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)")
- 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)")
- 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)")
- 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)")
- 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)")
- 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)")
- 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)")
- End If
- Else
- Cells(i, 2) = ""
- Cells(i, 3) = ""
- Cells(i, 4) = ""
- Cells(i, 5) = ""
- Cells(i, 6) = ""
- End If
- Next
- 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的选择,二是最后一个数据在第二张工作表所在的列
这个问题一直没有答案,非常希望有老师可以帮助
非常感谢老师
|
|