HERBERS Excel-Forum - das Archiv
Matrixformel via VBA runterkopieren
Jonathan

Hallo liebe Experten,
ich stehe mal wieder vor einem Problem.
In einer Tabelle stehen in der Spalte A Sachnummern. Diesen Sachnummern werden in den Spalten B-D unterschiedliche Werte zugewiesen.
Das ganze funktioniert auch wunderbar über folgende Matrixformel:
{=WENN(ZÄHLENWENN('S-Nummern'!$A:$A;$A4)>=SPALTE(A1);INDEX('S-Nummern'!$B$1:$B$100; KKLEINSTE(WENN('S-Nummern'!$A$1:$A$100=$A4;ZEILE('S-Nummern'!$A$1:$A$100));SPALTE(A1)));"") }
Diese Formel wird nun manuell bis zur letzten befüllten Zelle in Spalte A runterkopiert.
Wenn ich diese Formel in ein Makro schreibe und nach unten kopieren lasse, so schreibt er mir in jede Zelle in Spalte B (bis zum letzten Wert in Spalte A) die gleiche Formel, d.h. ohne jeweils die Zellbezüge anzupassen.
Was mache ich hierbei denn falsch?
Der Code in VBA lautet:
Range("B4:B" & Cells(Rows.Count, "A").End(xlUp).Row).FormulaArray = _
"=IF(COUNTIF(Picklist!C1,RC1)>=COLUMN(R[-3]C[-1]),INDEX(Picklist!R1C2:R100C2,SMALL(IF(Picklist!R1C1:R100C1=RC1,ROW(Picklist!R1C1:R100C1)),COLUMN(R[-3]C[-1]))),"""")"
Vielen Dank schon mal für eure Hilfe.
Gruß
Jonathan

AW: Matrixformel via VBA runterkopieren
Josef

Hallo Jonathan,
das geht am besten mit .AutoFill.
Jetzt mal "Freihändig" hingeschrieben!

Range("B4").FormulaArray = _
"=IF(COUNTIF(Picklist!C1,RC1)>=COLUMN(R[-3]C[-1]),INDEX(Picklist!R1C2:R100C2,SMALL(IF(Picklist! _
R1C1:R100C1=RC1,ROW(Picklist!R1C1:R100C1)),COLUMN(R[-3]C[-1]))),"""")"
Range("B4:B" & Cells(Rows.Count, "A").End(xlUp).Row).AutoFill

Gruß Sepp

AW: Matrixformel via VBA runterkopieren
Jonathan

Hallo Sepp,
vielen Dank für deine Antwort.
Mit .AutoFill gab es leider eine Fehlermeldung. Ich habe es dann in .FillDown umgeändert. Jetzt funktioniert es.
Gruß
Jonathan
.FillDown - .AutoFill > zuviel Punsch, sorry o.T.
Josef

Gruß Sepp