Bedingte Formatierung via Visual Basic in Microsoft Excel

...komplette Frage anzeigen

2 Antworten

So gehts bei mir:
Sub ZeileGanzBedingtFormatierenFlexibel()
Dim ACAdr
ACAdr = ActiveCell.Address
ActiveCell.EntireRow.Select 'für jede Zelle=>Zeile einzeln
Selection.FormatConditions.Add Type:=xlExpression, _
Formula1:="=" & ACAdr & "=$D$6" 'unflexibel: Formula1:="=$F$4=$D$6"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic '< ü'flüssig?
.Color = 10092543 '< weniger grelles Gelb
.TintAndShade = 0 '< ü'flüssig?
End With Selection.FormatConditions(1).StopIfTrue = False '< =anhalten?
End Sub

ich hab das auf die aktive=ausgewählte Zelle bezogen (in einer größeren Selection ist nur EINE die aktive Zelle), das erscheint mir flexibler. D6 ist allerdings im Makro festgeschrieben! Um das zu variieren, müsste man die Adresse im Makro ändern oder zB einen Relativbezug zur Activecell machen:
Dim LeitCAdr
LeitCAdr = Activecell.offset(0, -3).address
heisst, 3 Spalten links von der Activecell, gleiche Zeile
und dann analog ACAdr einbinden:
Formula1:="=" & ACAdr & "=" & LeitCAdr
Musst du entscheiden, wie Du es willst. In der bedingten Formatierung aller Zellen je einer Zeile sind dann aber trotzdem die Bezüge festgeschrieben, denn das Makro setzt den Text fest, wenn auch nach variablen Makrovorgaben!

ich muss Dich aber warnen: zu intensiver Gebrauch von bedingten Formatierungen kann unter ungünstigen Bedingungen zu anscheinend "Formatierungsstapeln" führen, die die Datei aufblähen bis zur Blockade, was sich wie ein Absturz auswirkt!
Kontrolliere jedesmal nach dem Speichern die Dateigröße (am Explorer)!
(ich nehme Deine Frage zum Anlass, ein Makro zum Löschen aller Bed,Firmat, eines Bereichs zu entwickeln, das ggf die Formatierung fixiert!

0
@Iamiam

Hallo! Danke für deine Mühen!!

Das mit der Dateigröße ist völlig wurscht. Wir erstellen jeden Tag ein Excel File, fügen eine Liste ein, diese wird jeden Tag auf genau dieselbe Weise formatiert, und dann abgespeichert. Am nächsten Tag erstellen wir ein neues File. Es kämen in Zukunft auch nur zwei bedingte Formatierungen pro Sheet zur Anwendung.

Ich fürchte, das mit dem Code, den du mir geschrieben hast, kriege ich nicht hin :( Verstehe das mit der ActiveCell nämlich nicht. Normalerweise, wenn ich die bedingte Formatierung anwenden will, wende ich sie auf das gesamte Blatt an, dh ich klicke links oben in das Eck der Spalten und Reihen, um alle Zellen auszuwählen. Dann wende ich die bedingte Formatierung an. Wenn ich jetzt nur eine ActiveCell angebe, wird mir nur eine Zelle - ich nehme mal an A1 - formatiert oder?. Dass D6 festgeschrieben ist, ist okay; die Zelle enthält nur den Wert, nachdem ich suchen möchte. Dieser Wert steht jeden Tag in dieser Zelle, das macht also nichts. Dementsprechend weiß ich aber nicht, was du in dem zweiten Codeteil mit dem Relativbezug meinst. Tut mir echt leid, ich bin wirklich nicht mit der Materie vertraut. Ich dachte, ich könne einfach irgendwo, wo der Code auf einzelne Zellen Bezug nimmt, stattdessen eine Reihe reinschreiben. Aber so einfach ist es wohl nicht, wie es aussieht :( Dadurch, dass du das Problem jetz ein bisschen anders angegangen bist, bewirkt dein Code nicht das, was ich benötige. Und ihn anzupassen traue ich mir nicht zu, weil ich mich damit nicht auskenne. :(

Ich danke dir trotzdem viel viel vielmals für deine Mühen, tut mir Leid, wenn ich deine Zeit verschwendet habe :( Selbstverständlich bekommst du noch ein Sternchen von mir, sobald mir das möglich ist!

Liebe Grüße Katharina

0
@Legovogel

Hi Katharina,
Das Makro formatiert die gesamte Zeile, wenn die aktive Zelle denselben Wert wie D6 enthält. Setzt natürlich voraus, dass du diesen Ort kennst und den Zellzeiger draufsetzt bzw -so war es von mir interpretiert- dass du eine Formelzelle hast und das Ergebnis =D6 ist oder nicht: wenn ja, wird die Zeile gefärbt, wenn nein, eben nicht.
ich verstehe wiederum Deine Einlassungen nicht ganz:
Du wählst das gesamte Blatt aus? Suchst du etwa, ob der Wert in D6 irgendwo sonst im Blatt auftaucht und willst das eingrenzen über die Zeilenfarbe? Sieht so aus. Ich hab bedingte Formate bisher in VBA noch nicht behandelt und werd das jetzt nachholen. Schau die nächste Zeit noch ein paarmal hier rein!

0
@Iamiam

Hi Katharina-Legovogel,
Mit der bedingten Formatierung sehe ich keine Chance, da die betroffene Zelle nirgends wiedergegeben wird. Also muss man nach dem Wert suchen (lassen) und an der gefundenen Stelle die ganze Zeile markieren . Das ist dann allerdings fix, aber ich gehe davon aus, dass sich die gefundene Zahl nicht mehr verändert.
Bitte Rückmeldung, obs auch bei Dir funktioniert!
Kopiere das µ hier und füge es in ein Codeblatt ein:

Sub SuchenWieD6UndFarbKreuz()
Dim FormelD6, WertD6
FormelD6 = ActiveSheet.Range("D6").Formula
WertD6 = ActiveSheet.Range("D6").Value
ActiveSheet.Range("D6").Formula = ""
ActiveSheet.Range("A1").Select
On Error Resume Next
If IsError(ActiveSheet.Cells.Find(What:=WertD6, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate) Then
GoTo FehltHier
Else: ActiveSheet.Cells.Find(What:=WertD6, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole , SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate '
End If
ActiveCell.EntireRow.Cells.Interior.Color = 10092543
ActiveCell.EntireColumn.Cells.Interior.Color = 10092543
Range("D6").Formula = FormelD6: End
FehltHier:
Range("D6").Formula = FormelD6: MsgBox WertD6 & " ist ausser in D6 nicht vorhanden": End
End Sub
'Prinzip: D6 wird in Variabler zwischengespeichert, dann D6 geleert und der Wert im Blatt gesucht.
'es wird nur EIN gleicher Wert gefunden, reicht das?

Es ginge auch, mehrere zu finden, aber es würde dann unübersichtlich mit den Farbkreuzen, da müsste dann eine andere Lösung gesucht werden.
Stelle dann bitte eine neue Frage (Die Kommentare werden immer schmaler).

0

Wenn das Makro ansonsten richtig ist, der Bereichsbefehl heißt zB Selection oder
Activecell.Entirerow...

noch ein Tipp: Weise das Makro einer Autoform zu (kann Textfeld mit längerer Beschriftung sein). fixiere ein paar Zeilen und Spalten und platziere die Autoform im Kreuz links oben.

0
@Iamiam

Da war ich jetzt mit dem Tippen zu schnell ;) Danke dir! Einen "Button" hab ich schon, das passt bereits :)

0

Danke für die schnelle Hilfe, Iamiam! Ich bin leider ein ziemlicher Laie auf dem Gebiet. Ich hab jetzt an allen erdenklichen Stellen im Code die "Selection" durch "ActiveCell.EntireRow" ersetzt, das Makro markiert jedoch weiterhin nur die Zellen mit dem Suchparameter. Weißt du vielleicht, wie ich den Code ändern muss?

Danke vielmals! Lg

0
@Legovogel

muss ich mir auch erst mal erarbeiten, mach mich aber dran.

0

Was möchtest Du wissen?