2017-10-13 39 views
1

我努力讓Excel數組公式適用於通過VBA代碼。工作Excel ArrayFormula被拆分爲VBA,因爲太長

的公式如下:

=IF(B2=VLOOKUP(B2,Admin!$G$5:$G$501,1,FALSE),IFERROR(INDEX(Admin!$G$5:$K$501,MATCH(1,(Admin!$I$5:$I$501=A2)*(Admin!$G$5:$G$501=B2),0),5),INDEX(Admin!$G$5:$K$501,MATCH(1,(Admin!$I$5:$I$501="ALL")*(Admin!$G$5:$G$501=B2),0),5)),"") 

我嘗試使用下面的代碼通過VBA來應用它:

Sub LongArrayformula() 
    Dim ArrayFormulaPart1, ArrayFormulaPart2 As String 
    ArrayFormulaPart1 = "=IF(B2=VLOOKUP(B2,Admin!$G$5:$G$501,1,FALSE),IFERROR(INDEX(Admin!$G$5:$K$501,XXXX" 
    ArrayFormulaPart2 = "MATCH(1,(Admin!$I$5:$I$501=A2)*(Admin!$G$5:$G$501=B2),0),5),INDEX(Admin!$G$5:$K$501,MATCH(1,(Admin!$I$5:$I$501=""ALL"")*(Admin!$G$5:$G$501=B2),0),5)),"""")" 
    With ActiveSheet.Range("bv2") 
     .FormulaArray = ArrayFormulaPart1 
     .Replace "XXXX", ArrayFormulaPart2, lookat:=xlPart 

     End With 
End Sub 

我知道在網絡上有很多網站有關這一主題的,但我不能讓這個公式自動應用。

我不斷收到錯誤「無法設置Range類的FormulaArray屬性」,並且「.FormulaArray = ArrayFormulaPart1」被突出顯示。

我試過其他的代碼也沒有運氣。由於語法對我來說幾乎是未知的,我不知道要改變什麼以適應我播種的許多代碼以滿足我的需要。

非常感謝您的幫助,並最終快速解釋如何使用VBA正確設置數組公式。

+1

此外,只要記住接受你使用的答案。在你最後一個問題中,你承認答案有效,但不接受它。你可以通過點擊你使用的答案來勾選複選標記。如果您不提供這種類型的反饋,其他人將停止回答您的未來問題。 –

回答

1

這是因爲第一個公式必須是一個可行的方案,以在第一時間進入:

Sub LongArrayformula() 
    Dim ArrayFormulaPart1, ArrayFormulaPart2 As String 
    ArrayFormulaPart1 = "=IF(B2=VLOOKUP(B2,Admin!$G$5:$G$501,1,FALSE),IFERROR(INDEX(Admin!$G$5:$K$501,9999,5),INDEX(Admin!$G$5:$K$501,MATCH(1,(Admin!$I$5:$I$501=""ALL"")*(Admin!$G$5:$G$501=B2),0),5)),"""")" 
    ArrayFormulaPart2 = "MATCH(1,(Admin!$I$5:$I$501=A2)*(Admin!$G$5:$G$501=B2),0)" 
    With ActiveSheet.Range("bv2") 
     .FormulaArray = ArrayFormulaPart1 
     .Replace "9999", ArrayFormulaPart2, lookat:=xlPart 
    End With 
End Sub 
+0

Scott,謝謝。有效。 我已經閱讀過,你必須在某處分割公式,但我所見過的所有例子總是在最後打破公式。我從來沒有想過你實際上可以在任何地方「破壞」公式。最後一個問題,如果你可以回答:「lookat:= XlPart」它有什麼作用?以及爲什麼某些代碼沒有它,而其他人卻這樣做(至少這是我在網上找到的)? 再次感謝您的寶貴和快速幫助 – fedone

+0

@fedone查看我的評論以上關於您應該如何處理答案。直到問題出現15分鐘後才能選擇正確的答案,但您可以返回並選擇最後一個問題的正確答案。 –