2016-06-24 3 views
1

I имеют следующую формулу массива в ячейке B2 в моей таблице Excel:Ошибка выполнения 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, если первое или второе условие не выполняется, остаток формулы для этого цикла не обрабатывается. IFs в обработке останова формулы при первом 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, print, чтобы узнать, как возвращается .Formula. Если он содержит полуколоны, то используйте

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

Hi 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

Смежные вопросы