Nur Wenn Zell X, dann Zelle Y = Zelle Z
27.09.2021 22:27:45
LeoMun
ich habe mir bereits sehr viele Beiträge zum Thema durchgelesen, aber ich finde keine funktionierende Lösung.
Es geht um einen Aufgabentracker.
Zu beginn wird in der Spalte E das jeweilige Level angegeben "0", "1", "2" oder "3" ein.
Dies wird dann in den Spalten A-D mit Formeln entsprechend dargestellt und nummeriert.
In Spalt I gibt an, wann die Aufgabe beginnt und in Spalte K wie lange diese dauert.
Die Formel in Spalte J gibt dann entweder das Datum der jeweiligen Aufgabe zurück (Level = 3) oder gibt das frühste Datum der jeweiligen Gruppe an (Level = 0, 1, 2).
So ist der 27.04.2021 das frühste Startdatum der Gruppe 1.1 in der Beispieldatei.
Nun soll der berechnete Wert auf J in die Spalte I übernommen werden, wenn das Level 0, 1 oder 2 ist. Spalte J wird dann im Nachgang ausgeblendet.
Bei Level 3 soll der händisch in Spalte I eingetragene Wert erhalten bleiben.
Später allerdings nur im Bereich ab Zeile 14, in der Beispieldatei habe ich die oberen Zeilen mit "Blalba" nur entfernt.
Sinn des Makros ist, dass wenn in Spalte E eine "3" steht, der Wert in Spalte I händisch eingetragen wird, bei "0", "1" und "2" soll der Wert aus Spalte J übernommen werden.
Ich habe jetzt ein entsprechendes Makro zusammen, aber das läuft extrem langsam... daher habe ich die Berechnung schon eingeschränkt, aber es dauert bei nur 100 Zeilen teilweise mehrere Sekunden bis das aktualisiert wurde. Ich glaube mir fehlt irgendwie ein entsprechender Stopp der Schleife.
Folgende Anpassung hat zwar ein geringe Verbesserung gebracht, wenn das Makro ausgeführt wurde (Spalte I), aber dafür gab es dann Dauerwartezeiten :(
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
die Aktualisierung der Ansicht und die Neuberechnung der Zellen ausschalten.
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Call Calculate
Makro
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("I13:I100")) Is Nothing Then
Dim c As Range
lz = 100 'Cells(Rows.Count, 1).End(xlUp).Row
For Each c In Range("E13:E" & lz).Cells
If c.Value Like "2" Or c.Value Like "1" Or c.Value Like "0" And c.Offset(0, 5).Value > "1" Then
c.Offset(0, 4).Value = c.Offset(0, 5).Value
End If
Next c
End Sub
Beispiel:https://www.herber.de/bbs/user/148299.xlsm
Was mache ich beim Marko falsch? Oder liegt die Trägheit an den ganzen Formeln?
Es gibt mehrere Beiträge, die ähnliche Themen behandeln, aber ich habe leider keinen gefunden der das so macht :(
Falls es doch einen gibt, den ich übersehen habe, sehr gerne verlinken.
Vielen Dank im Voraus für jeden Input und einen wunderschönen Abend.
Leo