Wenn es nur um die...
06.12.2025 13:28:08
Case
Moin Christian, :-)
… Neugier geht, dann kannst du auch "Evaluieren". ;-)
Also keine Formel im Tabellenblatt - könnte bei sehr großen Tabellen von Vorteil sein. ;-)
Da du ja sowieso schon mit VBA arbeitest, kannst du es über das Worksheet_Change auch so machen: ;-)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then Target.Offset(, 1).Value = Application.Evaluate("IF(A" & Target.Row & ">"""",ROUNDUP(RANK.EQ(A" & Target.Row & ",A$1:A$200000,0)/COUNTA(A$1:A$200000),2),"""")")
End Sub
Das ist die "Schmalspurvariante". ;-)
Wenn du nun aber 200 Daten in Spalte A reinkopieren willst und ein mehrfaches Aufrufen von Worksheet_Change verhindern möchtest, dann nimm das: ;-)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim varArr As Variant
Dim strTMP As String
On Error GoTo Fin
If Target.Column = 1 Then
Application.EnableEvents = False
strTMP = "IF(" & Intersect(Target, Me.Columns(1)).Address(0, 0) & ">""""," & "ROUNDUP(RANK.EQ(" & Intersect(Target, Me.Columns(1)).Address(0, 0) & ",A$1:A$200000,0)/COUNTA(A$1:A$200000),2),"""")"
varArr = Application.Evaluate(strTMP)
Intersect(Target, Me.Columns(1)).Offset(0, 1).Value = varArr
End If
Fin:
Application.EnableEvents = True
End Sub
Das "Evaluate" wird direkt als Array geladen und auf einen Rutsch ausgegeben. ;-)
Habe dir meine Beispieldatei angehangen (kaum getestet und die Formeln in Spalte B habe ich schon als Werte drin - also Spalte B markieren, STRG+C und dann Einfügen - Werte): ;-)
https://www.herber.de/bbs/user/179781.xlsb
Man könnte auch noch gleich als Prozent formatieren, oder, oder, oder... ;-)
Servus
Case