2016-07-29 25 views
0

Ich versuche, eine erweiterte Filtertabelle in Excel VBA wie im Bild unten zu bauen. In der letzten Spalte verwende ich die folgende Array-Formel.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))" 

Das Problem ist, ich habe, dass es kopiert die Formel auf alle Zellen in Bereich, ohne die Zelle zu ändern: Verträge B13. Es bleibt gleich. B13.

Advanced Filter

Wo bin ich falsch?

Danke, Daniel

+0

Nun, was soll es ändern? C13, D13 .. und so weiter? –

+0

Es sollte zu B14, B15, B16 und so weiter ändern. :-) –

Antwort

0

Sie können es wie folgt tun:

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

Ich habe das gleiche Problem. Es ist eine Array-Formel. Ich bekomme ein gutes Ergebnis mit: Arbeitsblätter ("Verträge"). Bereich ("N13"). Kopieren Arbeitsblätter ("Verträge"). Bereich ("N14: N" & Arbeitsblätter ("Verträge"). "M" & Rows.Count) .End (xlUp) .Row) .PasteSpecial xlPasteFormulas –

+0

verstehe ich nicht ganz. Auf welches Problem stoßen Sie? Es kann unmöglich die gleiche Formel wieder schreiben. Oo –

+0

Wenn ich diese Zeile verwende "Arbeitsblätter (" Verträge "). Bereich (" N13: N "& i) .Formula = _" Es ändert sich die Formel, aber die erste Zelle Referenz ist B und letzte Reihe Nummer, in meinem Fall 40 und nicht 13 als erste Reihe. Aber wenn ich ".Formula" mit ".FormulaArray" verändere, bekomme ich die gleiche Formel über die ganzen Zellen. –