Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1872to1876
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

Benachbarte Zellen einfärben

Benachbarte Zellen einfärben
09.03.2022 17:47:10
Tom
Liebe Foristen,
bei der Erstellung eines Planungssheets möchte ich gern innerhalb einer Spalte eine gewisse Anzahl von darunterliegende Zellen in Abhängigkeit eines aus der darüberliegenden Zelle ausgelesenen Wertes einfärben.
Das ganze muss man sich wie einen Stundenplan denken. Markierte Zellen bedeuten eine Blockung der entsprechenden Zelle.
In A1 steht z.B. "4h NABU" . Nun soll genau die Zelle A1 plus 3 weitere Zellen darunter markiert werden, also insgesamt 4 markierte Zellen.
In A5 könnte man nun "2h BNE" eintragen, was zur Markierung von A5 und A6 führt.
Ich hoffe, das klingt einigermaßen verständlich.
Vielen Dank

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nutze die bedingte Formatierung ...
09.03.2022 17:58:40
neopa
Hallo Tom,
... und zwar mit einer entsprechenden Formel. Wie soll das ganze aber formatiert werden, wenn in A3 z.B. "3h nix" steht. (D)eine Beispieldatei mit Deinem Wunschergebnis könnte hilfreich sein.
Gruß Werner
.. , - ...
AW: nutze die bedingte Formatierung ...
09.03.2022 18:39:42
Tom
Danke für die Antwort. Ja, bedingte Formatierung hatte ich mir schon gedacht.
So https://www.herber.de/bbs/user/151664.xlsx soll das Ergebnis aussehen. Die Einfärbungen sollen automatisch erfolgen.
"3h nix" in A3 würde A3, A4, A5 einfärben. Allerdings würde man dort diesen Eintrag nicht vornehmen, wenn durch "4h NABU" in A1 die drei Folgezellen eingefärbt werden und somit visuell die Blockung des Zeitraumes A1, A2, A3, A4 dargestellt wird..
Anzeige
AW: nutze die bedingte Formatierung ...
09.03.2022 19:16:32
Yal
Hallo Tom,
mit bedingter Formatierung geht es nicht, da die zu viele Parameter volatil sind, u.a. welche Farbe vergeben werden soll. Bed.For. kann keine Zellenfarbe übernehmen.
Mit folgendem Code wird der Zahl vor dem "h" extrahiert und die eigene Zellfarbe die (n-1)-Zellen darunter übergeben.
Sollte zuerst der Zahl eingegeben und dann die Farbe, dann "h"-Zelle öffnen und wieder schliessen (F2, Enter).

Private Sub Worksheet_Change(ByVal Target As Range)
Dim A
On Error Resume Next
With Target.Range("A1")
A = Split(.Value, "h")
If UBound(A) > 0 Then
.Resize(A(0), 1).Interior.Color = .Cells.Interior.Color
Else
Target.Interior.Pattern = xlNone
End If
End With
End Sub
Der Code gehört in der Codepane des Blattes: auf dem Blatt-Reiter Rechtklick auf "Code anzeigen", dann Code an der Stelle reinkopieren.
Die Datei muss danach als .xlsm gespeichert werden.
VG
Yal
Anzeige
AW: Deine 1. Aussage dürfte widerlegt sein ;-) owT
09.03.2022 19:27:37
neopa
Gruß Werner
.. , - ...
AW: mit eingen VERWEIS() möglich ...
09.03.2022 19:26:19
neopa
Hallo Tom,
.. wenn Du wirklich immer nur einen Textwert stellvertretenden für alle h einschreiben willst. Viel einfacher wäre es, wenn Du für jede Stunde den gleichen Namen einschreiben würdest. (die doppelten Stundennamen lassen sich mit bed. Formatierung viel einfacher nicht darstellen, als das was Du als Zielstellung angegeben hast.
Mein Lösungsansatz dafür hab ich Dir nachstehend aufgezeigt. Dieser setzt momentan noch voraus dass die Stundenanzahl immer eine Ziffer als erstes Zeichen steht und ab der 4 Stelle die Stundenbezeichnung steht, für die "gefärbt" werden soll. Etwas sicherer wäre es jedoch mit SUCHEN() in dem entsprechenden Formelteil zu arbeiten. Darauf hab ich jetzt verzichtet, weil ich sowieso für die zuerst geschilderte Variante plädiere. Solltest Du Dich doch für die untenstehende Variante entscheiden, so wisse, dass durch kopieren einer Zele (gesamt, nicht nur des Zelldatenwertes) aus drei bedingten Formatierungsregeln, schnell ein vielfaches werden kann.
Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCD
1 MontagDienstagMittwoch
21. Stunde4h NABU3h Klima2h BNE
32. Stunde   
43. Stunde  2h Klima
54. Stunde 2h BNE 
65. Stunde2h BNE  
76. Stunde  2h NABU
87. Stunde   
9    

Zellebedingte Formatierung...Format
B21: (TEIL(VERWEIS(9;1/(B$1:B2>"");B$1:B2);4;99)="BNE")*(LINKS(VERWEIS(9;1/(B$1:B2>"");B$1:B2);1)*1&gt=ZEILE()+1-VERWEIS(9;1/(B$1:B2>"");ZEILE(B$1:B2)))abc
B22: (TEIL(VERWEIS(9;1/(B$1:B2>"");B$1:B2);4;99)="Klima")*(LINKS(VERWEIS(9;1/(B$1:B2>"");B$1:B2);1)*1&gt=ZEILE()+1-VERWEIS(9;1/(B$1:B2>"");ZEILE(B$1:B2)))abc
B23: (TEIL(VERWEIS(9;1/(B$1:B2>"");B$1:B2);4;99)="NABU")*(LINKS(VERWEIS(9;1/(B$1:B2>"");B$1:B2);1)*1&gt=ZEILE()+1-VERWEIS(9;1/(B$1:B2>"");ZEILE(B$1:B2)))abc
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.02] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Gruß Werner
.. , - ...
Anzeige
Na gut...
09.03.2022 19:54:13
Yal
... ich gebe mich -sportlich- geschlagen: es geht doch mit bedingte Formatierung. Aber die Flexibilität ist arg beschränkt.
VG
Yal
AW: mir schon klar ...
10.03.2022 09:40:12
neopa
Hallo Yal,
... das man mit VBA noch viel mehr Möglichkeiten hat, als nur mit Standardfunktionalitäten. Wobei deren Möglichkeiten von den meisten Usern nicht annähernd erkannt werden und Abhilfe nur mit VBA sehen und dabei dieses womöglich noch weniger beherrschen als die Standardfunktionalität. Unter andern deshalb beschäftige ich mich ausschließlich mit deren Möglichkeiten, wohl wissend dass man mit VBA manches (nicht alles) einfacher realisieren kann.
Auch für das was der TE als Zielstellung zusätzlich noch angefragt hat, würde ich für mich anders (einfacher und flexibler) als bisher von mir aufgezeigt lösen. Aber er hat ja jetzt Deine VBA-Lösung.
Gruß Werner
.. , - ...
Anzeige
Ganz deiner Meinung...
10.03.2022 10:43:07
Yal
...immer zuerst mit Standardfunktionalität denken, da bin ich bei Dir.
Vor allem auch, weil zu viele Leute sich VBA als ein "gedankenlesende Zauberstab" vorstellen. Dabei holt man sich damit meistens nicht den Harry Potter sondern den Voldemort ins Haus ;-)
Die Grenze ist immer die Kompetenz der Geholfenen. Ich bin immer beeindruckt, was mit Formeln rauszuholen ist, aber es stellt sich die Frage, wieviel Erfahrung man haben muss, um solche Lösung fehlerfrei zusammenzubauen.
Ich habe schon mal Schwierigkeiten die Formel zu verstehen und nachzubauen :-) Was ist dann mit Leute, die sich als "VBA gut" einstufen.
VG
Yal
Anzeige
AW: und ich teile Deine Meinung, ...
10.03.2022 11:30:35
neopa
Hallo Yal,
... womit ich mich allerdings nur auf Deine Aussagen zu den Standardfunktionalitäten und Formeln beziehe. Und ja, es bedarf manchmal schon reichlich Erfahrung, um so manche Formel zu erstellen. Doch mit Grundkenntnissen und den nötigen Willen, könnte/sollte es möglich sein, diese zumindest prinzipiell nachzuvollziehen.
Deine Aussagen zu VBA zu beurteilen, steht mir mangels meiner rudimentären VBA-Kenntnisse nicht zu. Ich bin nur der Meinung, dass jeder User der VBA sich lediglich für Excel-Lösungen aneignen soll/möchte, sich zunächst mit den wesentlichsten Standardfunktionalitäten und wichtigsten Funktionen ausreichend bekannt gemacht haben sollte.
Gruß Werner
.. , - ...
Anzeige
AW: mit eingen VERWEIS() möglich ...
09.03.2022 20:03:18
Tom
Wow, vielen Dank für die Lösungsansätze. Wenn ich das richtig verstehe, müssen bei der VERWEIS-Version sämtliche mögliche Angebote feststehen, dann formatiert man die Zellen entsprechen und kann dann über das Tabellenblatt die Angebote verplanen. Das ist leider nicht dynamisch genug.
Die Angebote sollen über eine Liste zur Verfügung gestellt werden, gelegentlich ergänzt, reduziert, erweitert und dann über drop down Listen verplant werden können mit der gewünschten Einfärbung zur Darstellung des zeitlichen Umfangs. Ob die eingefärbten Zellen den Wert der Referenzzelle übernehmen oder nicht ist eigentlich egal. Übersichtlicher finde ich jedoch weniger Text.
Die Makro Variante erfordert dann sicherlich immer erneut die Ausführung des Makros um die Einfärbung umzusetzen, das scheint mir etwas umständlich.
Ich habe die Art der Angebotsauswahl in meinem Beispiel mal eingebaut.
Anzeige
AW: mit eingen VERWEIS() möglich ...
10.03.2022 16:55:11
Tom
Hey Leute,
in der Hoffnung die Hilfsbereitschaft hier nicht völlig überzustrapazieren: Was natürlich noch das i-Tüpfelchen wäre, ist das die eingefärbten Zellen mit der Löschung des Inhaltes der Referenzzelle auch wieder entfärbt würden. Gibt es dazu Hinweise?
Viele Grüße
AW: mit eingen VERWEIS() möglich ...
09.03.2022 20:57:05
Yal
Hallo Tom,
"immer erneut die Ausführung des Makros": nein, es ist ein Ereignis-basierte Makro. Wenn der Inhalt einer Zelle sich ändert, startet das Makro automatisch.
Ich habe das Makro leicht geändert, so dass die Farben zuerst auf das Angebotsliste abgelegt werden und so übernehmen werden können.
https://www.herber.de/bbs/user/151668.xlsm
Viel Spass damit
VG
Yal
Anzeige
AW: mit eingen VERWEIS() möglich ...
09.03.2022 20:43:00
Yal
"die doppelten Stundennamen lassen sich mit bed. Formatierung viel einfacher nicht darstellen":
_ Es wird in den Zellen B2:B5 4 mal "4h NABU" geschrieben.
_ Hintergrundfarbe wird mit bed.For. "=Rechts(B2;4)="NABU" auf Blau gesetzt
_ Schriftfarbe wird mit "=UND(B2=B1";Rechts(B2;4)="NABU")" auf dieselben Blau gesetzt und damit ist der Text nicht sichtbar.
Für jeden Eintrag müssen 2 bed.For. angelegt werden. Dafür aber einfachere.
Nach dem Motto der faule Programmierer "mache nicht selber, was der Computer für dich machen kann": die Bedingte Formatierung per Makro setzen:

Sub FC_Setzen()
Dim P
Dim FC As FormatCondition
With Range("B2:F7")
.FormatConditions.Delete
For Each P In Array(Array("NABU", 15123099), Array("BNE", 49407), Array("Klima", 5296274), Array("xyz", 16777215))
Set FC = .FormatConditions.Add(Type:=xlExpression, Formula1:="=RECHTS(B2;" & Len(P(0)) & ")=""" & P(0) & """")
FC.Interior.Color = P(1)
FC.StopIfTrue = False
Set FC = .FormatConditions.Add(Type:=xlExpression, Formula1:="=UND(B1=B2;RECHTS(B2;" & Len(P(0)) & ")=""" & P(0) & """)")
FC.Font.Color = P(1)
FC.StopIfTrue = False
Next
End With
End Sub
Dann ist nur noch die Frage an dem "faulen" Programmierer: gibt es auch einen Trick, um die aktuelle Farbegebung, diese komischen Zahlen, zu lesen?
Na klar:

Sub Farbe_lesen()
Dim Z, D, s
Set D = CreateObject("Scripting.Dictionary")
On Error Resume Next
For Each Z In Worksheets(1).Range("B2:C7")
If Z.Value  "" Then D.Add Mid(Z.Value, InStrRev(Z.Value, " ") + 1), Z.Interior.Color
Next
For Each Z In D.Keys
s = s & ",Array(""" & Z & """, " & D(Z) & ")"
Next
Debug.Print "Array(" & Mid(s, 2) & ")"
End Sub
(funkioniert aber nur, wenn die Farbe tatsächlich gesetzt und nicht per bed.For. "nur angezeigt" werden)
VG
Yal
Anzeige
AW: mit eingen VERWEIS() möglich ...
10.03.2022 08:03:12
Tom
Hallo Yal,
großartig!! Vielen, vielen Dank.
Dank deines Codes läuft nun alles wie gewollt. Das Ergebnis ist hier https://www.herber.de/bbs/user/151670.xlsm . Die Referenzzelle für die Einfärbung muss per Hand gefüllt werden, oder?! Eine Textverkettung aus zwei anderen Zellen scheinen nicht die gewollte Färbung auszulösen, aber damit kann ich leben. Ich habe noch eine Schaltfläche zur Erstellung eines Klassenplanes in ein neues Tabellenblatt aus der Gesamtabelle erstellt und würde dies auch für die anderen Klassen noch tun oder gibt es da eine elegantere Lösung, die alle Klassenpläne auf einmal in jeweils neue Tabellenblätter erstellt?
Viele Grüße
AW: mit eingen VERWEIS() möglich ...
10.03.2022 11:19:20
Yal
Hallo Tom,
"Die Referenzzelle für die Einfärbung muss per Hand gefüllt werden, oder?!"
Es liegt an der Suchfunktion. Probiere anstatt

Set F = Range("V:V").Find(.Value)
folgendes:

Set F = Range("V:V").Find(.Value, LookIn:=xlValues)
Die Übergabe in der jeweiligen Blätter kannst Du so zusammenfassen:
Du brauchst ein leeres Plan als separaten Blatt mit dem Namen "Vorlage".

Sub AllePlane_herstellen()
' erstellt Stundenplan der pro Klasse
Dim wZ As Worksheet 'Ziel-Worksheet
Dim zQ As Range     'Quell-Zelle
With Worksheets("Tabelle1")
For Each zQ In .Range("C1:T1")
Set wZ = WähleOderHerstelle(zQ.Value, "Vorlage")
wZ.Range("B2:F30").ClearContents
.Cells(2, zQ.Column).Resize(5, 1).Copy wZ.Range("B2")
.Cells(8, zQ.Column).Resize(5, 1).Copy wZ.Range("C2")
.Cells(14, zQ.Column).Resize(5, 1).Copy wZ.Range("D2")
.Cells(20, zQ.Column).Resize(5, 1).Copy wZ.Range("E2")
.Cells(26, zQ.Column).Resize(5, 1).Copy wZ.Range("F2")
Next
End With
Application.CutCopyMode = False
End Sub
Private Function WähleOderHerstelle(Blattname, wsVorlage) As Worksheet
Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Worksheets(Blattname)
If ws Is Nothing Then
Set ws = ThisWorkbook.Worksheets(wsVorlage).Copy
ws.Name = Blattname
End If
Set WähleOderHerstelle = ws
End Function
VG
Yal
AW: mit eingen VERWEIS() möglich ...
10.03.2022 19:44:42
Tom
Hallo,
mal wieder ein erneutes großes DANKE! Der Code liefert allerdings einen Laufzeitfehler 91 "Objektvariabel oder With-Blockvariable ist nicht festgelegt".
Gibt es in Bezug auf die eingefärbten Zellen noch die Möglichkeit der Umsetzung, dass bei dem Leeren der Referenzzelle die Färbung der Folgezellen wieder rückgängig gemacht wird und weiß erscheint?
vg
Tom
AW: mit eingen VERWEIS() möglich ...
10.03.2022 20:42:48
Yal
Neuer Code für "Tabelle1" und für Modul1.
Tabelle1:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim A
Dim F
On Error Resume Next
Application.ScreenUpdating = False
With Target.Range("A1")
If Intersect(.Cells, Range("C2:T31")) Is Nothing Then Exit Sub
Set F = Range("V:V").Find(.Value)
If Not F Is Nothing Then
A = Split(LCase(.Value), "h")
If UBound(A) > 0 Then
.Resize(A(0), 1).Interior.Color = F.Interior.Color
Else
Target.Select
Do
Selection.Interior.Pattern = xlNone
Selection.Offset(1, 0).Select
Loop While Selection = "" And ((Selection.Row - Target.Row) 
Modul1:

Sub AllePlane_herstellen()
' erstellt Stundenplan der pro Klasse
Dim wZ As Worksheet 'Ziel-Worksheet
Dim zQ As Range     'Quell-Zelle
With ActiveWorkbook.Worksheets("Tabelle1")
For Each zQ In .Range("C1:T1")
Set wZ = WähleOderHerstelle(zQ.Value, "Vorlage")
wZ.Range("B2:F30").ClearContents
.Cells(2, zQ.Column).Resize(5, 1).Copy wZ.Range("B2")
.Cells(8, zQ.Column).Resize(5, 1).Copy wZ.Range("C2")
.Cells(14, zQ.Column).Resize(5, 1).Copy wZ.Range("D2")
.Cells(20, zQ.Column).Resize(5, 1).Copy wZ.Range("E2")
.Cells(26, zQ.Column).Resize(5, 1).Copy wZ.Range("F2")
Next
End With
Application.CutCopyMode = False
End Sub
Private Function WähleOderHerstelle(Blattname, wsVorlage) As Worksheet
Dim ws As Worksheet
On Error Resume Next
With ActiveWorkbook
Set ws = .Worksheets(Blattname)
If ws Is Nothing Then
Set ws = .Sheets(wsVorlage).Copy(After:=.Sheets(.Sheets.Count))
ws.Name = Blattname
End If
End With
Set WähleOderHerstelle = ws
End Function
VG
Yal
AW: mit eingen VERWEIS() möglich ...
10.03.2022 21:44:02
Tom
Hey,
Klasse, das Entfärben klappt nun super, beim Generieren der Pläne erhalte ich allerdings immer noch die gleiche Fehlermeldung. Ich füge die Datei an: https://www.herber.de/bbs/user/151700.xlsm
AW: mit eingen VERWEIS() möglich ...
10.03.2022 22:19:38
Yal
ok gefunden.
die innere im WählenOderHerstellen muss so aussehen:

If ws Is Nothing Then
.Sheets(wsVorlage).Copy After:=.Sheets(.Sheets.Count)
Set ws = .Sheets(.Sheets.Count)
ws.Name = Blattname
End If
VG
Yal
AW: mit eingen VERWEIS() möglich ...
11.03.2022 17:23:28
Tom
Perfekt!!! Vielen, vielen Dank.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige