Hi,
der Code ist auch nicht für 200 Zellen gleichzeitig gedacht sondern dafür, wenn in Spalte A eine Eingabe erfolgt - und das tut man normalerweise nur für EINE Zelle. Dass er über mehrere Zellen läuft ist nur eine Vorsichtsmaßnahme, da es schließlich passieren kann, dass versehentlich mehrere Zellen gleichzeitig ausgewählt werden und dann würde ein Laufzeitfehler ausgelöst, weil "Target" auf 1 Zelle ausgerichtet ist.
Du hattest nicht geschrieben, dass auch Daten gelöscht werden können... Den Laufzeitfehler kann man aber durch die folgende Codeänderung umgehen:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngZelle As Range
If Target.Column = 1 And Target.Row > 1 Then
If Target.Cells(1) <> "" Then '<== nur wenn ein Eintrag erfolgt
For Each rngZelle In Intersect(Target, Columns(1))
rngZelle.Offset(0, 7).Formula = "=IF(COUNTIF($I$2:I" & _
rngZelle.Row & ",I" & rngZelle.Row & _
")=1,COUNTIF(I:I,I" & rngZelle.Row & "),"""")"
rngZelle.Offset(0, 8).Formula = "=IF(B" & rngZelle.Row & _
"="""","""",B" & rngZelle.Row & "&"" ""&C" & rngZelle.Row & _
"&"" ""&E" & rngZelle.Row & ")"
Next rngZelle
End If
End If
End Sub
Wenn du die Formel unbedingt erst nach Abschluss aller Einträge in Spalte A übertragen willst, was m.E. nicht sinnvoll erscheint, da man das ja gleich bei Eintrag in jede Zelle der Spalte A erledigen kann, kannst du das mit folgendem Makro:
Sub FormelnEintragen()
Dim lngLetzte As Long
lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Cells(2, 7).Formula = "=IF(COUNTIF($I$2:I2,I2)=1,COUNTIF(I:I,I2),"""")"
Cells(2, 8).Formula = "=IF(B2="""","""",B2&"" ""&C2&"" ""&E2)"
Range("G2:H2").AutoFill Destination:=Range(Cells(2, 7), Cells(lngLetzte, 8)), Type:=xlFillDefault
End Sub
Bis später, Karin