Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1580to1584
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zellen mit Schleifen in Abhängigkeit befüllen

Zellen mit Schleifen in Abhängigkeit befüllen
21.09.2017 10:45:07
ckoeni
Guten Morgen :)
Bin gerade dabei einen Terminplan zu erstellen mit entsprechenden Vorgängen, einer "KW Start", einer Dauer, einer "KW Ende" und dem entsprechenden Zeitbalken dazu (soll entsprechend Start/Dauer/Ende in bestimmten Farben eingefärbt werden).
Die Zellen in dem Bereich sollen also für jede Zeile geprüft werden und eingefärbt werden, wenn der KW-Wert in der entsprechenden Spalte >= der KW-Start ist und Sieht momentan so aus:

Sub Schaltfläche23_Klicken()
Dim letzte As Long
Dim i, j As Long
Dim zelle, bereich As Range
Application.ScreenUpdating = False
letzteZeile = ActiveSheet.Cells(1048576, 1).End(xlUp).Row
letzteSpalte = ActiveSheet.Cells(4, 256).End(xlToLeft).Column
Set bereich = Range("R8:BQ201")
For i = 18 To letzteSpalte
For j = 8 To letzteZeile
If ActiveSheet.Range(7, i) >= ActiveSheet.Range(j, 9) Then
ActiveSheet.bereich.Interior.ColorIndex = 3
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub

Nur leider tut sich aktuell noch gar nichts?!
Bin für jeden Tipp dankbar :-)
Hier noch die Datei wenn benötigt: https://www.herber.de/bbs/user/116411.xlsm
Beste Grüße,
Christoph

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen mit Schleifen in Abhängigkeit befüllen
21.09.2017 10:59:20
ChrisL
Hi Christoph
Geflickt...
Sub Schaltfläche23_Klicken()
Dim letzteZeile As Long, letzteSpalte As Long
Dim i As Long, j As Long
Application.ScreenUpdating = False
letzteZeile = ActiveSheet.Cells(1048576, 9).End(xlUp).Row
letzteSpalte = ActiveSheet.Cells(7, 256).End(xlToLeft).Column
For i = 18 To letzteSpalte
For j = 9 To letzteZeile
If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(j, 9) Then
Cells(j, i).Interior.ColorIndex = 3
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub
Das Problem mit den Jahren habe ich dir als kleine Herausforderung offen gelassen ;)
Eigentlich wäre die Aufgabe prädestiniert für eine bedingte Formatierung.
cu
Chris
Anzeige
AW: Zellen mit Schleifen in Abhängigkeit befüllen
21.09.2017 11:34:39
ckoeni
Hi Chris auch :),
danke dir schon mal, es färbt sich schon mal ein! :)
Mal die Herausforderung mit den Jahren außer Acht gelassen, funktioniert das prima haha. Jetzt hätte ich in die Schleife aber noch eingebaut, dass sich die Zellen logischerweise wieder weiß färben müssen, wenn nichts drinnen steht?! Müsste aber doch analog funktionieren, nicht?
Datei: https://www.herber.de/bbs/user/116420.xlsm
Code:
Sub Schaltfläche23_Klicken()
Dim letzteZeile As Long, letzteSpalte As Long
Dim i As Long, j As Long
Application.ScreenUpdating = False
letzteZeile = ActiveSheet.Cells(1048576, 9).End(xlUp).Row
letzteSpalte = ActiveSheet.Cells(7, 256).End(xlToLeft).Column
For i = 18 To letzteSpalte
For j = 8 To letzteZeile
If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(j, 9) And ActiveSheet.Cells(7, i) 
Mit der bedingten Formatierung geb ich dir absolut recht. Die Datei liegt auch genau so bereits vor und funktioniert absolut einwandfrei (kann ich gerne einstellen ;) ), zwingt meinen Rechner jedoch irgendwann in die Knie, womit es kein schönes arbeiten mehr ist.
vg, chris
Anzeige
AW: Zellen mit Schleifen in Abhängigkeit befüllen
21.09.2017 12:53:39
ChrisL
Hi
Die Bedingung steht ja schon, da braucht es nur noch ein "Else"
If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(j, 9) And ActiveSheet.Cells(7, i) 
Oder du setzt am Anfang vom Code einfach den ganzen Bereich auf Weiss.
Wenn die bedingte Formatierung richtig gemacht wurde, dann ist es eine einzige Bedingung über den ganzen Bereich. Kopieren, Verschieben und sonstiges gebastel führt dazu, dass aus einer Bedingung mehrere einzelne Bedingungen werden können. Ich vermute daher, wenn du alle Bedingungen löschst und sauber neu definierst, dann würde auch dein Rechner nicht schlapp machen.
cu
Chris
Anzeige
AW: Zellen mit Schleifen in Abhängigkeit befüllen
21.09.2017 13:50:11
ckoeni
Vielen Dank schon mal Chris!
Ich hab das ganze jetzt noch etwas angepasst, um die Über-/Unterpunkte verschiedenfarbig einzufärben abhängig vom Einzug.

Sub Schaltfläche23_Klicken()
Dim letzteZeile As Long, letzteSpalte As Long
Dim i As Long, j As Long
Dim rgb As Long
Application.ScreenUpdating = False
letzteZeile = ActiveSheet.Cells(1048576, 9).End(xlUp).Row
letzteSpalte = ActiveSheet.Cells(7, 256).End(xlToLeft).Column
For i = 18 To letzteSpalte
For j = 8 To letzteZeile
If IsEmpty(Cells(j, 9)) Or IsEmpty(Cells(j, 10)) Then
Cells(j, i).Interior.ColorIndex = 2
ElseIf ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(j, 9) And ActiveSheet.Cells(7,  _
i) = ActiveSheet.Cells(j, 9) And ActiveSheet.Cells(7,  _
i) = ActiveSheet.Cells(j, 9) And ActiveSheet.Cells(7,  _
i) 
Sieht so weit auch gut aus, nur weiß ich einfach nicht, wie ich die Jahreszahl einbauen soll...idealerweise so dass die Tabelle zukünftig einfach erweiterbar ist.
Bzgl. der bedingten Formatierungen: Hier mal die Datei (https://www.herber.de/bbs/user/116428.xlsm
)...kannst mal reinschauen (nur wenn du Lust hast). Ein Feedback wäre sicher interessant :-)
Würde es jetzt aber gerne über das Makro fertig lösen, wenn es quasi schon fast fertig ist.
vg, chris
Anzeige
AW: Zellen mit Schleifen in Abhängigkeit befüllen
21.09.2017 17:29:32
ChrisL
Hi Chris
Ja bei so vielen bedingten Formatierungen über einen grossen Bereich kannst du nicht viel machen. Allerdings läuft ein Makro auch nicht viel schneller. Du könntest höchstens die automatische Berechnung abschalten und mittels manueller Aktualisierung arbeiten.
So richtig flexibel ist das Makro nicht, aber das sind deine Buttons ja auch nicht ;)
Sub Schaltfläche23_Klicken()
Dim letzteZeile As Long
Dim rngBereich As Range, rngZelle As Range
Dim i As Long, j As Long
Application.ScreenUpdating = False
With ActiveSheet
letzteZeile = .Cells(Rows.Count, 9).End(xlUp).Row
For i = 9 To 15 Step 3
For j = 8 To letzteZeile
Set rngBereich = .Range(.Cells(j, ((i - 9) / 3 * 52) + 18), .Cells(j, ((i - 9) / 3 * 52) + _
69))
For Each rngZelle In rngBereich
If .Cells(j, i) = "" Or .Cells(j, i + 2) = "" Then
rngZelle.Interior.ColorIndex = 2
ElseIf .Cells(7, rngZelle.Column) >= .Cells(j, i) And _
.Cells(7, rngZelle.Column) = .Cells(j, i) And _
.Cells(7, rngZelle.Column) = .Cells(j, i) And _
.Cells(7, rngZelle.Column) 

cu
Chris
Anzeige
AW: Zellen mit Schleifen in Abhängigkeit befüllen
21.09.2017 18:46:31
ChrisL
Hi
Nachgedacht... Eigentlich wäre ein Worksheet_Change Ereignis ganz passend und dann reicht es auch wenn du den Code nur auf die betreffende Zeile anwendest, was deutlich schneller und zudem flexibler wäre. Vorausgesetzt du hast keine Abhängigkeiten zwischen den Zeilen.
Darum die Frage... hast du vor die verschiedenen Projekte und Teilprojekte noch untereinander zu verknüpfen?
cu
Chris
AW: Zellen mit Schleifen in Abhängigkeit befüllen
22.09.2017 09:55:12
ckoeni
Hi Chris,
selber Gedanke (teileweise ;) ). Wollte eben das Ganze auch schon mit einem Change-Ereignis lösen, allerdings hätte ich vermutlich den ganzen Code genommen. Das nur die betreffende Zeile aktualisiert wird, wäre aber eine sinnvolle Lösung.
Schließlich will man nicht immer mit einem Button aktualisieren, sondern das Ganze "automatisieren". Abhängigkeiten bestehen eigentlich keine nein, es steht also jede Zeile für sich.
vg, chris
Anzeige
AW: Zellen mit Schleifen in Abhängigkeit befüllen
22.09.2017 10:49:38
ckoeni
Hi nochmal,
hab es jetzt mit einem Change Ereignis gemacht und es funktioniert eigentlich nicht schlecht und wesentlich schneller als über bed. Formatierungen.
Und nochmal über die Abhängigkeiten nachgedacht, wäre das eine sinnvolle Lösung, aber ganz ohne Abhängigkeiten geht es glaub ich doch nicht (Bsp.: KW Start = KW Ende + 1 --> mehrere gleichzeitig verschieben über Änderung KW Start usw.). Daher wird man wohl bei der Lösung bleiben müssen und minimale Rechenzeit ertragen müssen.
Ein ungeklärtes Rätsel hätte ich noch, wozu ich noch nirgends eine Lösung gefunden habe. Und zwar würde ich gerne den (jetzt) hellblauen Bereich (je in Spalte A und B) verbinden und zentrieren (ich weiß: Todsünde) und die Schrift um 90° drehen. Dann funktioniert allerdings das Zeilen einfügen nicht mehr über das Makro (Button "Neuen Vorgang einfügen"). Normalerweise löse ich das in der Horizontalen über "über Auswahl zentrieren", aber in der Vertikalen hab ich dazu irgendwie noch keine Lösung gefunden?!
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrorHandler
If Intersect(Target, Range("I8:Q201")) Is Nothing Then Exit Sub
Dim letzteZeile As Long
Dim rngBereich As Range, rngZelle As Range
Dim i As Long, j As Long
Application.ScreenUpdating = False
With ActiveSheet
letzteZeile = .Cells(Rows.Count, 9).End(xlUp).Row
For i = 9 To 15 Step 3
For j = 8 To letzteZeile
Set rngBereich = .Range(.Cells(j, ((i - 9) / 3 * 52) + 18), .Cells(j, ((i - 9) / 3 * 52) + _
69))
For Each rngZelle In rngBereich
If .Cells(j, i) = "" Or .Cells(j, i + 2) = "" Then
rngZelle.Interior.ColorIndex = 2
ElseIf .Cells(7, rngZelle.Column) >= .Cells(j, i) And _
.Cells(7, rngZelle.Column) = .Cells(j, i) And _
.Cells(7, rngZelle.Column) = .Cells(j, i) And _
.Cells(7, rngZelle.Column) 

vg, chris
Anzeige
AW: Zellen mit Schleifen in Abhängigkeit befüllen
22.09.2017 11:22:05
ChrisL
Hi Chris
Inzwischen hatte ich auch am Change gearbeitet. Du müsstest natürlich die Schleife über die Zeilen entfernen bzw. nur über den Targetbereich, sonst bringt Change nichts.
Den Eingabebereich I8:Q201 habe ich mit Namen definiert:
If Intersect(Target, .Range("Eingabebereich")) Is Nothing Then Exit Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim letzteZeile As Long
Dim rngBereich As Range, rngZelle As Range
Dim i As Long, j As Long, r As Range
With ActiveSheet
If Intersect(Target, .Range("Eingabebereich")) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
For i = 9 To 15 Step 3
For Each r In Target.Rows
j = r.Row
Set rngBereich = .Range(.Cells(j, ((i - 9) / 3 * 52) + 18), .Cells(j, ((i - 9) / 3 * 52) +  _
69))
rngBereich.Interior.ColorIndex = 2
For Each rngZelle In rngBereich
If .Cells(j, i) = "" Or .Cells(j, i + 2) = "" Then
rngZelle.Interior.ColorIndex = 2
ElseIf .Cells(7, rngZelle.Column) >= .Cells(j, i) And _
.Cells(7, rngZelle.Column) = .Cells(j, i) And _
.Cells(7, rngZelle.Column) = .Cells(j, i) And _
.Cells(7, rngZelle.Column) 
Da ich heute auch noch Brötchen verdienen muss, kann ich mich mindestens diese Woche nicht mehr um deine nächsten Probleme kümmern. Ich schaue nächste Woche wieder rein und sonst musst du halt einen neuen Beitrag machen (bitte Link zwischen den Beiträgen nicht vergessen).
cu
Chris
Anzeige
AW: Zellen mit Schleifen in Abhängigkeit befüllen
23.09.2017 10:46:12
ChrisL
Hi Chris
Ich war heute ausnahmsweise am Arbeiten, darum hatte ich Zeit in dein Excel zu schauen ;)
Für die Sache mit den verbundenen Zellen und Gruppierungen habe ich auch keine Lösung. Theoretisch würde ich die Verbindungen aufheben, Zeilen einfügen und Verbindungen/Formatierungen wieder herstellen. Aber in der Praxis habe ich aufgrund der Struktur keine Idee, wie du die Navigation vornehmen könntest (evtl. kannst du dich an den Textformatierungen orientieren).
cu
Chris
AW: Zellen mit Schleifen in Abhängigkeit befüllen
27.09.2017 08:44:11
ckoeni
Guten Morgen Chris,
ist mir völlig klar, bin dir eh schon sehr dankbar. War jetzt selbst paar Tage unterwegs.
Genau...wollte es genau so lösen, sprich auflösen, Zeile einfügen und wieder verbinden. Aber bin mir da wie gesagt auch noch nicht sicher, an was ich mich orientiere, um den jeweiligen Bereich wieder zu verbinden. Aber das mit den Textformatierungen ist evtl. ein guter Tipp. Ich probier das mal...
Ansonsten viel Spaß beim Brötchen verdienen erstmal, mach mich auch ran! :)
vg, chris
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige