簡體   English   中英

EXCEL VBA-選擇案例-索引/匹配

[英]EXCEL VBA - Select Case - Index / Match

我有一個電子表格,其中包含一個很大的IF,然后是Formula,並且它變得有些失控,該電子表格越來越慢,變得越來越難以維護。

是否可以將公式從單元格移動到VBA? 這會改善性能嗎? 我當時正在考慮使用Select Case,但在Select Case是否可行方面需要一些幫助。
選擇情況將需要查看多個單元格, If A1 = Yes AND A2 = "Cash" AND A3 = No"則調用索引匹配函數來檢索值。這可能嗎?

將公式從工作表移入VBA是否有很大的性能提升?

感謝您的任何建議。 布雷特

我認為,僅僅將相同的代碼從單元中移入VBA並不會帶來任何性能改進。

但是,它更容易閱讀,然后您可能會發現並非所有條件語句都是必需的,因此您可以簡化它-這樣可以加快速度。

“選擇大小寫”可能不會有什么幫助,因為它只能用於單個比較,而不是您提到的三個。

我建議一次邁出一步,將公式移至VBA,然后將其轉換為VBA“ if”語句。 然后,您可能會看到整理它的方法。

是和否。使用VBA的主要優點是您還可以使用forwhile循環。 因此,不必為每個單元格編寫相同的公式,而是可以開發代碼以在需要/想要的多個單元格中進行這些計算。

由於問題中提供的信息量很少,因此這不是一個容易回答的問題。

將代碼包含在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM