2016-06-24 75 views
1

我在我的Excel電子表格的單元格B2以下數組公式:運行時錯誤1004複製公式陣列

{=IF(COUNT(IF(ISNUMBER(A30:A1000);IF(B30:B1000>A30:A1000-1;A30:A1000)))>=COUNT(IF(ISNUMBER(A30:A1000);COUNT(B30:B1000>A30:A1000-1;A30:A1000)));COUNT(IF(ISNUMBER(A30:A1000);COUNT(B30:B1000>A30:A1000-1;A30:A1000))))} 

現在我想用下面的VBA代碼,這個代碼複製到單元格A2:

Sheets("Sheet1").Range("A2").FormulaArray = Sheets("Sheet1").Range("B2").Formula 

然而,當我使用此代碼,我得到運行時錯誤1004

你有任何想法如何解決這個問題呢?

+0

這是真的。我在這裏的帖子中輸入了錯誤信息。在我的Excel文件中它是正確的,但運行時錯誤的問題仍然存在。 – Michi

+0

這是一個打字錯誤。抱歉。它應該是B而不是AP。但是,即使我糾正它,運行時錯誤仍然會發生。 – Michi

回答

0

您的數組公式太長,不能像Range.FormulaArray property那樣傳遞。

你不需要重複所有的條件。在循環遍歷30到1000行時,如果第一個或第二個條件失敗,則不會處理該週期的其餘公式。公式中的IF在第一個FALSE處停止處理。

=IF(COUNT(IF(ISNUMBER(A30:A1000), IF(B30:B1000>A30:A1000-1, A30:A1000)))>=COUNT(B30:B1000>A30:A1000-1,A30:A1000),COUNT(B30:B1000>A30:A1000-1,A30:A1000)) 

現在代碼工作得很好。

With Worksheets("Sheet3") 
    .Range("A2").FormulaArray = .Range("b2").Formula 
End With 

請注意,我無法使用分號作爲系統列表分隔符進行測試;只能用我自己的系統的逗號。 VBA不喜歡通過EN-US區域設置在.Formula,.FormulaR1C1.FormulaArray屬性中的任何內容。如果仍有問題,請使用debug,打印以查看.Formula如何返回。如果它包含分號,然後使用,

With Worksheets("Sheet3") 
    .Range("A2").FormulaArray = Replace(.Range("b2").Formula, Chr(59), Chr(44)) 
End With 
+0

嗨Jeeped,謝謝你的回答。這是工作。但是,我簡化了上傳的公式,所以你的想法在我的原始公式中不起作用。我會把這個問題正確地提出來,並用我長久的原始公式發表另一個問題。謝謝你的幫助。 – Michi

+0

http://stackoverflow.com/questions/38011525/runtime-error-1004-copy-long-array-formula-in-vba – Michi

+0

不用擔心;似乎你找到了另一個問題的解決方案。另一種可能的解決方案是縮短傳輸公式並使用[Range.Replace方法](https://msdn.microsoft.com/en-us/library/office/ff194086.aspx)將其更改回原始一旦它被實例化爲一個數組公式。 – Jeeped