绕过FormulaArray

时间:2018-08-15 14:30:07

标签: excel vba

我想使用数组公式(需要在工作表中通过Ctrl + Shift + Enter输入的公式),而不使用Range.FormulaArray。

您认为有可能吗? 我特别想要的公式是:

    hello = WorksheetFunction.SMALL(WorksheetFunction.IF(MyRange<>0,MyRange),n)

谢谢大家的帮助。

2 个答案:

答案 0 :(得分:0)

将数组与0比较在VBA中无效,但是您可以Evaluate(对于错误值,hello As Variant):

hello = Sheet1.Evaluate("Small(If(" & MyRange.Address & "<>0, " & MyRange.Address & "), 2)")

答案 1 :(得分:0)

我认为您不能在VBA中将IF用作工作表函数。

但是,如果您有这个:

enter image description here

您可以这样做:

Sub tester()

    Dim r, i

    r = ActiveSheet.Evaluate("IF(A1:A10=0,FALSE,A1:A10)")

    For i = LBound(r) To UBound(r)
        Debug.Print i, Application.Small(r, i)
    Next i

End Sub

得到这个:

 1             1 
 2             2 
 3             3 
 4             5 
 5             6 
 6             7 
 7             8 
 8             9 
 9            Error 2036
 10           Error 2036

要翻译您发布的代码行:

hello = Application.Small(ActiveSheet.Evaluate("IF(A1:A10=0,FALSE,A1:A10)"), n)