我有一个电子表格,其中包含一个大量的IF然后是公式,它有点失控,电子表格变得越来越慢,变得越来越难以维护。
是否可以将公式从单元格移动到VBA?这会对性能有任何改善吗?我正在考虑使用Select Case,但需要一些帮助才能确定精选案例是否有效。
选择案例需要查看多个单元格即 If A1 = Yes AND A2 = "Cash" AND A3 = No"
,然后调用索引匹配函数来检索值。这可能吗?
将公式从工作表中移出VBA会有很大的性能提升吗?
感谢您的任何建议。 布雷特
答案 0 :(得分:0)
我认为只要将相同的代码从单元格移动到VBA中,您就不会发现任何性能提升。
然而,它会更容易阅读,然后您可能会发现并非所有条件都是必需的,因此您可以简化它 - 这会加快它的速度。
"选择案例"可能没什么用,因为它只能用于一次比较,而不是像你提到的那样。
我建议一步一步,将公式转移到VBA,并将其转换为VBA"如果"声明。然后你可能会看到整理它的方法。
答案 1 :(得分:0)
是和否。 使用VBA的主要优点是,您可以在循环时使用 或。 因此,您可以开发代码,在您需要/想要的任意数量的单元格中进行这些计算,而不是为每个单元格编写相同的公式。
由于问题中提供的信息量很少,这不是一个容易回答的问题。
答案 2 :(得分:0)
使用Excel公式中的代码意味着当其任何参数更改时将重新计算,即您更改一个Excel单元格的值 - >将重新计算使用此值的所有Excel单元格。当您进行不断更改时,这可能会显着减慢Excel的速度。
处理此问题的一种方法是手动关闭自动计算(公式 - >计算选项 - >手动)。通过点击公式 - >立即计算以重新计算整个工作簿或公式 - >计算工作表以仅重新计算工作表来进行更改并手动运行计算。
另一种方式是将公式移动到VBA过程。这样,您可以手动执行计算,同时自动执行工作簿中的所有其他计算。
EDIT1: 要从Excel公式创建VBA过程,请创建如下过程:
Sub CalculateFormula
Range("A1").Value = Evaluate("YOUR EXCEL FORMULA WITHOUT '='")
'Simple example below
Range("A1").Value = Evaluate("IF(A1=1,1,2)")
End Sub
EDIT2: 循环:
Sub CalculateFormula
for i = 1 to 10
Range("A" & i).Value = Evaluate("IF(B" & i & "=""Hello"",2,1)")
Next i
End Sub