Supportnet / Forum / Tabellenkalkulation
Zellen automatisch einfärben
Frage
Hallo zusammen!
hat jemand ne Idee wie ich ne Zelle in excel OHNE! Makro automatische einfärben kann??
vielen Dank schonmal + Gruß
Antwort 1 von 14071
wenn es von dem Wert abhängen soll, der in der Zelle steht, schau dir mal die bedingte Formatierung an. Menü Format-Bedingte Formatierung
Gruß
Jürgen
Gruß
Jürgen
Antwort 2 von want2cu
Jürgen hat schon den entscheidenden Tipp gegeben. Die bedingte Formatierung hat jedoch 2 Varianten:
Zellwert
Formel
Mit Zellwert hängt es nur vom Zellinhalt ab.
MIt Formel kannst du da schon eine ganze Menege mehr an Bedingungen einbauen.
CU
Klaus
Zellwert
Formel
Mit Zellwert hängt es nur vom Zellinhalt ab.
MIt Formel kannst du da schon eine ganze Menege mehr an Bedingungen einbauen.
CU
Klaus
Antwort 3 von dirkito
hat jemamd ne Idee wie es ohne bed. Formatierung mögl. ist z.B. von der Farbe einer anderen Zelle??
Gruß dirkito
Gruß dirkito
Antwort 4 von nighty
hi alle
kein makro schniff
keine formel
dann bleibt nur noch in der symbolleiste anzuwaehlen fuellfarbe.
gruss nighty
kein makro schniff
keine formel
dann bleibt nur noch in der symbolleiste anzuwaehlen fuellfarbe.
gruss nighty
Antwort 5 von coros
Hi,
schreib doch einfach mal hier rein, bei welcher Bedingung welche Zelle die Farbe ändern soll. Ich vermute mal, dass es hier eine ganze menge Leute gibt, die Dir helfen werden, Dein Problem zu lösen.
MfG,
coros
schreib doch einfach mal hier rein, bei welcher Bedingung welche Zelle die Farbe ändern soll. Ich vermute mal, dass es hier eine ganze menge Leute gibt, die Dir helfen werden, Dein Problem zu lösen.
MfG,
coros
Antwort 6 von nighty
hi alle
hab wohl formatierung mit formel verwechselt,wo sind die formelexperten fuer anderung der hintergrundfarbe(einer zelle),so lange hats ja noch nie gedauert.
gruss nighty
p.s.
bin leider kein formelFAN schniff
hab wohl formatierung mit formel verwechselt,wo sind die formelexperten fuer anderung der hintergrundfarbe(einer zelle),so lange hats ja noch nie gedauert.
gruss nighty
p.s.
bin leider kein formelFAN schniff
Antwort 7 von dirkito
so, aufgrund der verursachten Konfusion nun ne ausführliche beschreibung.
Ich habe mehrere Arbeitsblätter a, b, und c
nun wird die Zelle a 2 im Arbeitsblatt 'a' manuell eingefärbt. Automatisch sollen nun in den Arbeitsblättern b und c bestimmte Zellen in der gleichen Farbe gefärbt werden.
Hoffe dass man das versteht!
Grüße Dirkito
Ich habe mehrere Arbeitsblätter a, b, und c
nun wird die Zelle a 2 im Arbeitsblatt 'a' manuell eingefärbt. Automatisch sollen nun in den Arbeitsblättern b und c bestimmte Zellen in der gleichen Farbe gefärbt werden.
Hoffe dass man das versteht!
Grüße Dirkito
Antwort 8 von 14071
färbst du die Zelle a2 nach gerade vorhandener Laune ein, oder hängt das von irgendwelchen Bedingungen ab??
Das wäre dann der hüpfende Punkt, der gesucht wird.
ciao
Jürgen
Das wäre dann der hüpfende Punkt, der gesucht wird.
ciao
Jürgen
Antwort 9 von want2cu
hallo dirkito,
mit einer bedingten Formatierung wirst du bei der "manuellen" Zelleinfärbung m.E. nicht weiter kommen.
Den Farbwert auslesen und die anderen Zellen dann automatisch entsprechend einfärben, wirst du nur mit einem Makro erledigen können.
Also entweder wird es nicht ohne Makro gehen oder du musst dir was anderes einfallen lassen.
Nach welchen Kriterien sollen denn die Zellen eingefärbt werden?
Warum definierst du dafür denn keine klaren Bedingungen, die du dann ganz einfach per bedingtem Format umsetzen kannst?
Beschreibe doch einfach mal genauer, was du machen willst. Bei "Formeln" ist nighty dann auch wieder mit im Boot ;-)
HTH+CU
Klaus
mit einer bedingten Formatierung wirst du bei der "manuellen" Zelleinfärbung m.E. nicht weiter kommen.
Den Farbwert auslesen und die anderen Zellen dann automatisch entsprechend einfärben, wirst du nur mit einem Makro erledigen können.
Also entweder wird es nicht ohne Makro gehen oder du musst dir was anderes einfallen lassen.
Nach welchen Kriterien sollen denn die Zellen eingefärbt werden?
Warum definierst du dafür denn keine klaren Bedingungen, die du dann ganz einfach per bedingtem Format umsetzen kannst?
Beschreibe doch einfach mal genauer, was du machen willst. Bei "Formeln" ist nighty dann auch wieder mit im Boot ;-)
HTH+CU
Klaus
Antwort 10 von dirkito
hi,
also,werds wohl doch über ein Makro realisieren.
velen Dank@alle
Gruß Dirk
also,werds wohl doch über ein Makro realisieren.
velen Dank@alle
Gruß Dirk
Antwort 11 von nighty
hi dirk
der erste versuch
wenn bei seite a eine beliebige zelle eingefaerbt wird gehe eine zelle runter und wieder hoch (noch nicht ausgereift)
dann wird automatisch seite b und c die gleiche position eingefaerbt.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Call Makro01
End Sub
Sub Makro01()
Application.DisplayAlerts = False
adress$ = ActiveWindow.RangeSelection.Address
adress1 = Len(adress$)
For mo = 1 To adress1
If Mid$(adress, mo, 1) = "$" Then
llp = llp + 1
Else
If llp = 1 Then
spalte$ = spalte$ + Mid$(adress, mo, 1)
End If
If llp = 2 Then
zeile$ = zeile$ + Mid$(adress, mo, 1)
zeile1 = Val(zeile$)
End If
End If
Next mo
f1 = 0
f1 = Range(spalte$ & zeile1).Interior.Color
Range(spalte$ & zeile1).Select
If f1 <> 12632256 Then
Sheets("b").Select
Range(spalte$ & zeile1).Interior.Color = f1
GoSub modulxx
Sheets("c").Select
Range(spalte$ & zeile1).Interior.Color = f1
GoSub modulxx
Sheets("a").Select
Application.DisplayAlerts = True
End If
End
modulxx:
If f1 <> 12632256 Then
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End If
Return
End Sub
gruss nighty
p.s.
das handicap wird noch ausgemerzt grummel
der erste versuch
wenn bei seite a eine beliebige zelle eingefaerbt wird gehe eine zelle runter und wieder hoch (noch nicht ausgereift)
dann wird automatisch seite b und c die gleiche position eingefaerbt.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Call Makro01
End Sub
Sub Makro01()
Application.DisplayAlerts = False
adress$ = ActiveWindow.RangeSelection.Address
adress1 = Len(adress$)
For mo = 1 To adress1
If Mid$(adress, mo, 1) = "$" Then
llp = llp + 1
Else
If llp = 1 Then
spalte$ = spalte$ + Mid$(adress, mo, 1)
End If
If llp = 2 Then
zeile$ = zeile$ + Mid$(adress, mo, 1)
zeile1 = Val(zeile$)
End If
End If
Next mo
f1 = 0
f1 = Range(spalte$ & zeile1).Interior.Color
Range(spalte$ & zeile1).Select
If f1 <> 12632256 Then
Sheets("b").Select
Range(spalte$ & zeile1).Interior.Color = f1
GoSub modulxx
Sheets("c").Select
Range(spalte$ & zeile1).Interior.Color = f1
GoSub modulxx
Sheets("a").Select
Application.DisplayAlerts = True
End If
End
modulxx:
If f1 <> 12632256 Then
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End If
Return
End Sub
gruss nighty
p.s.
das handicap wird noch ausgemerzt grummel
Antwort 12 von sicci
Hallo dirkito,
Weil es eine interessante Fragestellung ist, hab ich mich auch an eine einfach zu 'installierende' Makro-Lösung gemacht - auch sie färbt die gleichen Zellpositionen der neu eingefärbten Zelle in allen in der Mappe vorhanden Blättern. Die Einfärbung wird mit einfachem Enter ausgelöst.
für VBA-Neulinge:
Speichern und erneutes Öffnen der Mappe aktiviert den Code.
Zur Erklärung:
Beim Öffnen wird die gerade aktive Zelladresse in eine Public (also über alle im Modul enthaltenen Subs gültige) Variable geschrieben. Beim folgenden Zellwechsel wird die Füllfarbe dieser ersten Adresse abgefragt und in allen weiteren Tabellen der Mappe angeglichen. Als letzter Schritt wird die Adresse der neu selektierten Zelle in die Public Variable geschrieben, so daß sie beim nächsten Zellwechsel zur Verfügung steht.
@nighty:
immer noch auf Kriegsfuß mit der Variablendeklaration? Solltest Du Dir angewöhnen, da sie Ablauf- und Ressourcenzeit spart (in größeren Makros unerläßlich). Am besten schreibst Du am Anfang jeden Moduls: 'Option Explicit' hinein, dann wird die Deklaration, falls nicht vorhanden, beim Testen angemeckert. Ohne sie sind Deine ganzen Variablen mit der Voreinstellung 'Variant' belegt (aus der VB-Hilfe: Variant-Werte benötigen 16 Bytes Speicherplatz .. und der Zugriff auf diese Werte erfolgt langsamer ..)
Hier die Variablendeklaration zu Deinem Makro ;-)
Dim adress$, adress1%, mo%, llp%, spalte$, zeile$, zeile1$, f1 As Double
Gruß sicci
Weil es eine interessante Fragestellung ist, hab ich mich auch an eine einfach zu 'installierende' Makro-Lösung gemacht - auch sie färbt die gleichen Zellpositionen der neu eingefärbten Zelle in allen in der Mappe vorhanden Blättern. Die Einfärbung wird mit einfachem Enter ausgelöst.
für VBA-Neulinge:
- Alt + F11 drücken
- ..im sich öffnenden Fenster findet man links den sog. Projekt-Explorer (auch mit Menu:Ansich/ProjektExplorer einfügbar), in dem alle geöffneten Excel Mappen aufgelistet sind.
- Doppelklicken: erst die betreffende Excel-Mappe(z.B. Dirkito.xls), dann - dirket darunter - 'Microsoft Excel Objekte', dann - wiederum dirket darunter - 'Diese Arbeitsmappe'.
- Es öffnet sich rechts ein neues Fenster, in dem alles vorhandene markiert und gelöscht werden sollte. Dann nur noch folgenden Code hineinschreiben:
Option Explicit
Public AZ$
Private Sub Workbook_Open()
AZ = ActiveCell.Address
End Sub
Private Sub Workbook_SheetselectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Dim x%
For x = 1 To Sheets.Count
If x = ActiveSheet.Index Then
x = x + 1
If x > Sheets.Count Then Exit Sub
End If
Sheets(x).Range(AZ).Interior.ColorIndex = ActiveSheet.Range(AZ).Interior.ColorIndex
Next
AZ = Target.Address
End SubSpeichern und erneutes Öffnen der Mappe aktiviert den Code.
Zur Erklärung:
Beim Öffnen wird die gerade aktive Zelladresse in eine Public (also über alle im Modul enthaltenen Subs gültige) Variable geschrieben. Beim folgenden Zellwechsel wird die Füllfarbe dieser ersten Adresse abgefragt und in allen weiteren Tabellen der Mappe angeglichen. Als letzter Schritt wird die Adresse der neu selektierten Zelle in die Public Variable geschrieben, so daß sie beim nächsten Zellwechsel zur Verfügung steht.
@nighty:
immer noch auf Kriegsfuß mit der Variablendeklaration? Solltest Du Dir angewöhnen, da sie Ablauf- und Ressourcenzeit spart (in größeren Makros unerläßlich). Am besten schreibst Du am Anfang jeden Moduls: 'Option Explicit' hinein, dann wird die Deklaration, falls nicht vorhanden, beim Testen angemeckert. Ohne sie sind Deine ganzen Variablen mit der Voreinstellung 'Variant' belegt (aus der VB-Hilfe: Variant-Werte benötigen 16 Bytes Speicherplatz .. und der Zugriff auf diese Werte erfolgt langsamer ..)
Hier die Variablendeklaration zu Deinem Makro ;-)
Dim adress$, adress1%, mo%, llp%, spalte$, zeile$, zeile1$, f1 As Double
Gruß sicci
Antwort 13 von nighty
hi sicci
wow schoen kurz !!!
schoenes makro !!!
schniff sie haben recht mit den variablen ich versuch mich zu bessern.
mein makro war ja nun auch keine glanzleistung,ist schon vom ansatz schlecht geraten grimm.
gruss nighty
p.s.
ich lese mit vorliebe ihre loesungen und wuensche noch ein schoenes wochenende mit neuen ideen.
wow schoen kurz !!!
schoenes makro !!!
schniff sie haben recht mit den variablen ich versuch mich zu bessern.
mein makro war ja nun auch keine glanzleistung,ist schon vom ansatz schlecht geraten grimm.
gruss nighty
p.s.
ich lese mit vorliebe ihre loesungen und wuensche noch ein schoenes wochenende mit neuen ideen.
Antwort 14 von duweisstschon
Wenn wir schon mal beim belehren sind..
Das ist Unsinn:
1. Zählt x standardmäßig bei jedem Durchlauf der For-Schleife um 1 nach oben.
2. Kann X nicht größer werden wie sheets.count. Das läßt die For-Schleife nicht zu. Also gibt es auch nie exit.sub
Solche sinnlosen IF Verschachtlungen solltest Du Dir NICHT angewöhnen, da sie Ablauf- und Ressourcenzeit verbrauchten (in größeren Makros unerläßlich). ;-)
Das ist Unsinn:
If x = ActiveSheet.Index Then
x = x + 1
If x > Sheets.Count Then Exit Sub
End If
1. Zählt x standardmäßig bei jedem Durchlauf der For-Schleife um 1 nach oben.
2. Kann X nicht größer werden wie sheets.count. Das läßt die For-Schleife nicht zu. Also gibt es auch nie exit.sub
Solche sinnlosen IF Verschachtlungen solltest Du Dir NICHT angewöhnen, da sie Ablauf- und Ressourcenzeit verbrauchten (in größeren Makros unerläßlich). ;-)
Antwort 15 von sicci
Hallo Duweißtschon,
würde vorschlagen, Du testest das erstmal .. oder überlegst nochmal genau.
von wegen belehren:
mein Kommentar zu nighty kommt bei ihm sicher anders an, als bei Dir, denn er hat eine Vorgeschichte, die Du nicht kennst.
ich bleib beim Grüßen, auch wenn Du diese nette Tradition nicht zu kennen scheinst
Gruß
sicci
würde vorschlagen, Du testest das erstmal .. oder überlegst nochmal genau.
von wegen belehren:
mein Kommentar zu nighty kommt bei ihm sicher anders an, als bei Dir, denn er hat eine Vorgeschichte, die Du nicht kennst.
ich bleib beim Grüßen, auch wenn Du diese nette Tradition nicht zu kennen scheinst
Gruß
sicci
Antwort 16 von sicci
Hallo nighty,
sorry, sehe eben erst, daß Du auch geantwortet hattest. Also nochmal ganz deutlich: Du weißt ja, warum ich das so schrieb ;-) .. gebe die Hoffnung nicht auf, denn ich finde Dein(e) Makro(s) ja schon länger interessant (+ interessant genug für's Ausprobieren und Kommentieren). Freue mich auch immer über Tips, wie ich meine verbessern kann und schließe von mir auf andere. Aber: Du mußt mich deshalb nicht plötzlich siezen, kannst ruhig beim Du bleiben, sonst müßte ich Sie auch siezen ;-).
Gruß und:
mach bloß weiter mit den Makros!
sicci
sorry, sehe eben erst, daß Du auch geantwortet hattest. Also nochmal ganz deutlich: Du weißt ja, warum ich das so schrieb ;-) .. gebe die Hoffnung nicht auf, denn ich finde Dein(e) Makro(s) ja schon länger interessant (+ interessant genug für's Ausprobieren und Kommentieren). Freue mich auch immer über Tips, wie ich meine verbessern kann und schließe von mir auf andere. Aber: Du mußt mich deshalb nicht plötzlich siezen, kannst ruhig beim Du bleiben, sonst müßte ich Sie auch siezen ;-).
Gruß und:
mach bloß weiter mit den Makros!
sicci
Antwort 17 von nighty
hi alle
@sicci
hi ich hoffe auf zukünftigen erfahrungsaustausch,das ist doch das was spass macht ideen austauschen zudem
das nix mit belehrungen zu tun hat.ich freu mich aufs naechste mal.
gruss nighty
@sicci
hi ich hoffe auf zukünftigen erfahrungsaustausch,das ist doch das was spass macht ideen austauschen zudem
das nix mit belehrungen zu tun hat.ich freu mich aufs naechste mal.
gruss nighty
Antwort 18 von sicci
@nighty:
DITO! :-)
gruss sicci
PS:
Zu Duweißtschons unüberlegter "Unsinns"-Deklaration:
Man KANN die IF-Abrage weglassen, kommt aber auf die Bedigungen an.
Die Erhöhung von x um 1 nahm ich vor, weil es nicht nötig ist, das ActiveSheet, das ja händisch geändert wird, per Makro nochmal zu ändern. Mit dieser Erhöhung wird x, wenn das ActiveSheet die letzte Tabelle im Blatt ist, 1 höher als sheets.count und würde ohne Exit Sub einen MakroFehler verursachen. Glaube aus Erfahrung, daß eine If-Abfrage im Makro letzendlich schneller durchlaufen ist als die - unnötige, weil schon getätigte - Einfärbung einer Zelle.
Noch ein Grund bewog mich zur Lösung mit If-Abfrage: in Anlehnung an dirkitos Ursprungsfrage sollten "bestimmte" Zellen in den andern Blättern aufgrund der händischen Änderung im activesheet eingefärbt werden. Je nach Bedingung MUSS dafür bei einer Schleifenlösung die if-Abfrage rein, da sonst die benannten Zellen auch im ActiveSheet geändert werden.
DITO! :-)
gruss sicci
PS:
Zu Duweißtschons unüberlegter "Unsinns"-Deklaration:
Man KANN die IF-Abrage weglassen, kommt aber auf die Bedigungen an.
Die Erhöhung von x um 1 nahm ich vor, weil es nicht nötig ist, das ActiveSheet, das ja händisch geändert wird, per Makro nochmal zu ändern. Mit dieser Erhöhung wird x, wenn das ActiveSheet die letzte Tabelle im Blatt ist, 1 höher als sheets.count und würde ohne Exit Sub einen MakroFehler verursachen. Glaube aus Erfahrung, daß eine If-Abfrage im Makro letzendlich schneller durchlaufen ist als die - unnötige, weil schon getätigte - Einfärbung einer Zelle.
Noch ein Grund bewog mich zur Lösung mit If-Abfrage: in Anlehnung an dirkitos Ursprungsfrage sollten "bestimmte" Zellen in den andern Blättern aufgrund der händischen Änderung im activesheet eingefärbt werden. Je nach Bedingung MUSS dafür bei einer Schleifenlösung die if-Abfrage rein, da sonst die benannten Zellen auch im ActiveSheet geändert werden.

