【发布时间】:2016-10-19 04:52:10
【问题描述】:
所以我将这个大电子表格与正常的 excel 函数放在一起,效果很好,但我想通过使用 vba 并粘贴静态值而不是降低性能的引用值来加快它并缩小文件大小(工作簿现在大约 20 mb,并将继续增长)
所以我知道我想完成什么,但我很难用简洁的表达方式表达出来,因为我的 VBA 经验仍处于起步阶段,因此我们将不胜感激。
z-score = (数字 - 所有数字的平均值) / (所有数字的标准差)
Worksheets("relay").Value("c32") 包含所有数字的平均值 Worksheets("relay").Value("c33") 包含所有数字的标准差
我想做的,是在列 worksheets("Hitterscalc").range("cb:cb") 中,用 worksheets("Hitterscalc").range( "J:J") 用于该列中其对应的 A 列单元格不等于 "" 且其对应的 AB 列等于 1 的所有行
有人对此有什么简洁的陈述吗?我可以粗略地逐个单元格地完成它,但是当我开始放入循环以遍历所有列时,它在我的代码中全部崩溃了,不幸的是在我的脑海中。
感谢您的宝贵时间
Application.ScreenUpdating = False
Worksheets("hitterscalc").Range("cb2").FormulaR1C1 = _
"=IF(OR(RC[-79]="""",RC[-52]<>1,Settings!R4C[-74]<>""yes""),"""",(RC[-70]-relay!R32C[-77])/relay!R33C[-77])"
Sheets("HittersCalc").Select
Range("CB2").Select
Selection.AutoFill Destination:=Range("CB2:CB701") Range("CB2:CB701").Select Columns("CB:CB").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False
【问题讨论】:
-
用公式来做这一切。一旦你有了它,然后使用宏记录器为第一行重做公式,然后让它自动填充,最后复制和粘贴值。关闭宏记录器并查看代码。它会给你一个很好的起点。您可能有兴趣使用 Range(..).End(xlDown) 计算出需要自动填充多远
-
有没有办法进一步清理它? Application.ScreenUpdating = False Worksheets("hitterscalc").Range("cb2").FormulaR1C1 = _ "=IF(OR(RC[-79]="""",RC[-52]1,设置! R4C[-74]""yes""),"""",(RC[-70]-relay!R32C[-77])/relay!R33C[-77])" Sheets("HittersCalc") .Select Range("CB2").Select Selection.AutoFill Destination:=Range("CB2:CB701") Range("CB2:CB701").Select Columns("CB:CB").Select Selection.Copy Selection.PasteSpecial粘贴:=xlPasteValues,操作:=xlNone,SkipBlanks _ :=False,转置:=False Application.CutCopyMode = False
-
宁可将这样的代码添加到您的答案中,也不要将其全部放在 cmets 中,否则很难阅读。这次我已经为你编辑好了。
标签: excel vba statistics