2016-07-29 3 views
0

Я пытаюсь создать расширенный фильтр в excel vba, как на рисунке ниже. В последнем столбце я использую формулу ниже массива.excel vba FormulaArray

Worksheets("Contracts").Range("N13:N" & Worksheets("contracts").Range("M" & Rows.Count).End(xlUp).Row).FormulaArray = _ 
"=sum(if(invoice!$A$3:$A$2000=contracts!B13,invoice!$AA$3:$AL$2000))" 

Проблема у меня в том, что она копирует формулу для всех ячеек в диапазоне, не изменяя клетки от: B13 контрактов. Он остается прежним. B13.

Advanced Filter

Где я ошибаюсь?

Спасибо, Daniel

+0

Ну, что она должна измениться на? C13, D13 .. и так далее? –

+0

Он должен измениться на B14, B15, B16 и т. Д. :-) –

ответ

0

Вы можете сделать это следующим образом:

lastRow = Range("M" & Rows.Count).End(xlUp).Row 
For i = 13 to lastRow 
    Worksheets("Contracts").Range("N13:N" & i).Formula = _ 
    "=sum(if(invoice!$A$3:$A$2000=contracts!B" & i & ",invoice!$AA$3:$AL$2000))" 
Next 
+0

У меня такая же проблема. Это формула массива. Я получаю хороший результат, используя: Рабочие листы («контракты»). Диапазон («N13»). Копировать Рабочие листы («контракты»). Диапазон («N14: N» и «Рабочие листы» («контракты»). Диапазон («M» & Rows.Count) .End (xlUp) .Row) .PasteSpecial xlPasteFormulas –

+0

Я не совсем понимаю. В какой проблеме вы столкнулись? Он не может снова написать ту же формулу. Oo –

+0

Если я использую эту строку «Рабочие листы (« Контракты »). Диапазон (« N13: N »& i) .Formula = _« Он меняет формулу, но первая ссылка на ячейку - это номер B и номер последней строки, в моем случае 40, а не 13 как первая строка. Но если я меняю «.Formula» на «.FormulaArray», тогда я получаю одну и ту же формулу по всем ячейкам. –

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