EXCEL VBA - 选择案例 - 索引/匹配

时间:2014-07-30 08:34:52

标签: excel excel-vba match case vba

我有一个电子表格,其中包含一个大量的IF然后是公式,它有点失控,电子表格变得越来越慢,变得越来越难以维护。

是否可以将公式从单元格移动到VBA?这会对性能有任何改善吗?我正在考虑使用Select Case,但需要一些帮助才能确定精选案例是否有效。
选择案例需要查看多个单元格 If A1 = Yes AND A2 = "Cash" AND A3 = No",然后调用索引匹配函数来检索值。这可能吗?

将公式从工作表中移出VBA会有很大的性能提升吗?

感谢您的任何建议。 布雷特

3 个答案:

答案 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