Supportnet Computer
Planet of Tech

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

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

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

Antwort 4 von nighty

hi alle

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

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

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

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

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

Antwort 10 von dirkito

hi,
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

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:
  1. Alt + F11 drücken
  2. ..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.
  3. Doppelklicken: erst die betreffende Excel-Mappe(z.B. Dirkito.xls), dann - dirket darunter - 'Microsoft Excel Objekte', dann - wiederum dirket darunter - 'Diese Arbeitsmappe'.
  4. 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 Sub

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

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.

Antwort 14 von duweisstschon

Wenn wir schon mal beim belehren sind..

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


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

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


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.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: