Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Bezeichnung neben bedingter Formatierung
#1
Guten Tag liebes Forum,
vielleicht eine sehr spezielle Frage: ich habe einen Bauzeitenplan mit Excel erstellt. Dieser arbeitet mit einer Reihe an bedingten Formatierungen ("Gantt") um den Bauablauf darzustellen.
Nun meine Frage: ist es irgendwie möglich, wenn mein Zeitbalken von L9 - Z9 geht, dann soll in AA9 die Bezeichnung von F9 stehen. An sich nicht schwer, nur wenn ich die bedingte Formatierung (also den Zeitbalken) verschiebe, soll die Bezeichnung automatisch mitverschoben werden.
Im Anhang einige Bilder zum besseren Verständniss.

Zur Excel: Links bei Start und Dauer der Aktivität kann man Daten eintragen, die dann automatisch im Kalender farblich markiert werden. Zb. 14. August 2023 und 15 Tage, dann werden genau 15 Werktage eingezeichnet. Ändert man nun diesen Wert, verschiebt sich auch der Balken. Wenn man nun die unteren Aktivitäten mit den oberen verknüpft ist eine Änderung des Bauzeitplanes sehr schnell gemacht. Nur möchte ich nun gerne eben diese Aktivität neben dem Zeitbalken darstellen.

Vielen Dank und ich freue mich auf eure Antwort.

PS: die Excel ist noch nicht final, bitte verzeiht eventuelle Fehler oder schlechte Formatierungen.


Angehängte Dateien Thumbnail(s)
       

.xlsm   230720 Bauzeitplan - TEST.xlsm (Größe: 88,25 KB / Downloads: 6)
Antworten Top
#2
Hola,
in L9:
Code:
=WENN(L$5=$I9+1;$F9;"")

Die Formel nach rechts und nach unten ziehen.
Gruß,
steve1da
Antworten Top
#3
Hallo, das klappt perfekt! Nun ist der Text aber abgehackt. Wie kann ich ihn trotzdem vollständig anzeigen lassen?


Angehängte Dateien
.xlsm   230720 Bauzeitplan - TEST.xlsm (Größe: 120,76 KB / Downloads: 4)
Antworten Top
#4
Hi,

oder in L8 =$F8 (nach rechts und runter kopieren) und eine weitere bed.Form. mit der Formel =L$5<>$I8+1 und dem Zahlenformat ;;;

Beide Methoden, also die von mir und die von Steve, haben den Nachteil, dass der Text nicht in die Nachbarzellen ragt.
Wenn das passieren soll, dann brauchst du folgende Routine im entsprechenden Tabellenblatt:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
Dim Zelle As Range
Dim Datum As Variant
Dim DatZelle As Range
Set Bereich = Intersect(Target, Range("H:H,J:J"))
If Not Bereich Is Nothing Then
    For Each Zelle In Bereich
        If Zelle.row >= 8 Then
            Datum = Cells(Zelle.row, "I")
            For Each DatZelle In Range("L5:FT5")
                If DatZelle.Value > Datum Then
                    Exit For
                End If
            Next DatZelle
            Intersect(Zelle.EntireRow, Range("L:FT")).ClearContents
            Cells(Zelle.row, DatZelle.Column).FormulaR1C1 = "=RC6"
        End If
    Next Zelle
End If
End Sub
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#5
Hallo hKinlder, danke für die Antwort!
Deine option klappt zwar, nur wenn ich im nachhinein etwas veränder sprich einen datumsbalken verschiebe (zb die dauer von 10 auf 12 erhöhe), dann bleibt der Text wieder stehen und schiebt sich nicht mit. Wird wahrscheinlich am "clearcontents" liegen, da der Code ja den inhalt der zellen löscht.

Gibt eine andere möglichkeit?
Antworten Top
#6
Hi,

bei mir funktioniert es wenn etwas in Spalte H oder in Spalte J geändert wird. Dein Enddatum ist doch genau von den beiden Spalten abhängig - zumindest in deiner Beispieldatei.

Hast du die Routine denn in den Code-Bereich des entsprechenden Tabellenblattes kopiert?

Wenn es immer noch nicht funktioniert, dann lade deinen Versuch doch nochmals hier hoch.

PS: mit der Routine brauchst du die zuerst genannte Formel und die bed.Form. natürlich nicht!
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#7
Hallo,
das funktioniert jetzt, danke! Ich hatte die Funktionen und alles auch noch drin, dann kam wohl Excel durcheinander.
Folgende Probleme habe ich nun aber: wenn das Datum aus dem Bereich rausfällt dann bekomme ich eine Fehlermeldung, gibts da ne Lösung zu? Probier in der angehängten Datei beim Holzboden die gleiche Dauer einzugeben.
Zudem wenn ich die Anzeigewoche verändere dann schiebts die Texte nicht mit. Wenn ich zb bei Anzeigewoche "2" eingebe, dann bleiben die Texte stehen. Wäre es vllt besser den Code auf das Enddatum umzuschreiben und nicht auf die Dauer?

Vielen Dank und Mahlzeit.


Angehängte Dateien
.xlsm   230720 Bauzeitplan - TEST.xlsm (Größe: 92,84 KB / Downloads: 4)
Antworten Top
#8
Hi,

hatte ich nicht gesehen, dass sich das Datum in Zeile 5 ändern kann und von der "Anzeigewoche" abhängig ist.
Dann müsste man halt nicht auf das Worksheet_Change()-Ereignis, sondern auf das Worksheet_Calculate()-Ereignis gehen. Das hat aber den Nachteil, dass mit jeder Berechnung die Routine abgearbeitet wird. So etwas sollte man vermeiden.

Bevor mir hier unnötig Mühe mache: Wofür brauchst du denn die Anzeigewoche? Mit dem Scrollbalken unten hast doch bereits den selben Effekt.

Hi,

hab mir noch was anderes einfallen lassen (und auch gleich den Fehler mit dem zu großen Enddatum behoben).

Teste mal dies:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
Dim Zelle As Range
Dim Datum As Variant
Dim DatZelle As Range
If Target.Address = "$H$4" Then
    For Each Zelle In Intersect(Columns("J"), Me.UsedRange)
        Zelle.Formula = Zelle.Formula
    Next Zelle
End If
Set Bereich = Intersect(Target, Range("H:H,J:J"))
If Not Bereich Is Nothing Then
    For Each Zelle In Bereich
        If Zelle.row >= 8 Then
            Datum = Cells(Zelle.row, "I")
            For Each DatZelle In Range("L5:FT5")
                If DatZelle.Value > Datum Then
                    Exit For
                End If
            Next DatZelle
            Intersect(Zelle.EntireRow, Range("L:FT")).ClearContents
            If DatZelle Is Nothing Then Set DatZelle = Cells(Zelle.row, "FU")
            Cells(Zelle.row, DatZelle.Column).FormulaR1C1 = "=RC6"
        End If
    Next Zelle
End If
End Sub
Damit erhältst du auch gleich eine Ahnung, weshalb ich nicht auf das Calculate-Ereignis gehen würde...
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#9
Hi,

noch ein kleiner Fehler: ersetze die Zeile
Code:
Intersect(Zelle.EntireRow, Range("L:FT")).ClearContents
durch
Code:
Intersect(Zelle.EntireRow, Range("L:FU")).ClearContents
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#10
Hallo! Danke für deine großen Mühen. Nun funktioniert alles wie es soll! Grandios!

Zitat:Bevor mir hier unnötig Mühe mache: Wofür brauchst du denn die Anzeigewoche? Mit dem Scrollbalken unten hast doch bereits den selben Effekt.
Das ist vor allem für den Druck. Wenn das Projekt schon weit vorangeschritten ist und es an den Innenausbau geht, dann interessiert es den Baumeister nicht mehr wann der Tischler/Holzboden kommt. Seine Arbeit ist ja schon getan. :) Und man kann zum Schluss immerwieder zurückscrollen falls jemand wissen will wann was gemacht wurde.
Ich habe es damals so gelöst, vielleicht gibts ja eine bessere Lösung. 

Nochmals vielen Lieben Dank!

PS: ich habs gemerkt, Excel rechnet nun ganz schön wenn ich um ein paar Wochen verschiebe. :D
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste