Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Prüfen ob Hintergrundfarbe in VBA

Forumthread: Prüfen ob Hintergrundfarbe in VBA

Prüfen ob Hintergrundfarbe in VBA
02.09.2003 22:20:17
Christoph
Hallo bestes Forum,
ich knabber mal wieder an einem Problem bei VBA:
Wenn in einer Zeile in der Spalte K nichts eingetragen ist und in Spalte M (gleiche Zeile) ist ein Eintrag und die Hintergrundfarbe von der Zelle in Spalte M kommt in jeder einzelnen Zelle der Spalten A bis J (auch wieder nur diese Zeile) nicht vor, dann kopiere die Zelle aus Spalte M nach Spalte K. Nach diesem Schema werden alle Zeilen durchlaufen.
Mein Problem:
Wie formuliere ich das Thema: "Hintergrundfarbe von der Zelle in Spalte M kommt in jeder einzelnen Zelle der Spalten A bis J" nicht vor?


Sub kopiere_wenn_Farbe()
lRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = lRow + 1 To 3 Step -1
CIndex = Cells(i, 13).Interior.ColorIndex
If Cells(i, 11) = 0 And Cells(i, 13) <> 0 And ???<>CIndex Then
Cells(i, 13).Copy
Cells(i, 11).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= False, Transpose:=False
End If
Next i
End Sub

Ich benötige also für jede Zeile i einen Durchlauf mit Farbprüfung für die Spalten A bis J.
Ich könnte hierbei natürlich jede einzelne Spalte von A bis J ansprechen, aber das scheint mir viel zu umständlich.

schon vorab vielen Dank
Gruß
Christoph
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob Hintergrundfarbe in VBA
02.09.2003 22:46:21
PeterW
Hallo Christoph

mal als Ansatz:

If Cells(i, 11) = 0 And Cells(i, 13) <> 0 Then
bolNichtCopy = false
For intcount = 1 To 10
If Cells(i, intcount).Interior.ColorIndex = Cells(i, 11).Interior.ColorIndex Then
bolNichtCopy = True
Exit For
End If
Next
End If

If Not (bolNichtCopy) Then
Cells(i, 13).Copy
Cells(i, 11).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If

Gruß
Peter
Anzeige
Das klingt gut
02.09.2003 23:05:26
Christoph
Hi Peter,
die Prüfung mit dem Bolean gefällt mir. Alleine wäre ich nie darauf gekommen. Zumal meine VBA-Kenntnisse noch viel Raum zur Entwicklung haben (sprich: in meiner Birne ist noch nicht viel von dem Thema drin...)
Vielen herzlichen Dank, ich werd mich morgen mit deinem vielversprechenden Ansatz beschäftigen.
Vielleicht kannst du mir ja noch ne Frage am Rande beantworten.
Wieso schreibt man die Variable bei "If Not (bolNichtCopy) Then" in Klammern?

ich hab die sehr zu danken
Gruß
Christoph


Anzeige
AW: Das klingt gut
02.09.2003 23:13:51
PeterW
Hallo Christoph,

die Klammern sind nicht nötig, hatte wohl gleichzeitig noch einen anderen Ansatz im Kopf. :-)
Der Ansatz ist nicht getestet und es funktioniert auch nur, wenn die Zellfarbe nicht durch eine bedingte Formatierung zugewiesen wurde.

Gruß
Peter
Merci o.T.
02.09.2003 23:23:03
Christoph
AW: Das klingt gut
02.09.2003 23:42:11
PeterW
Hallo Christoph,

da fällt mir gearde noch was auf: wenn in einer Zelle 0 steht ist sie nicht leer. Also die Prüfung auf leer mit Cells(Zeile, Spalte) = ""

Gruß
Peter
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Prüfen der Hintergrundfarbe in VBA für Excel


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeinDateiname)" und wähle "Einfügen" > "Modul".

  3. Kopiere den folgenden Code in das Modul:

    Sub kopiere_wenn_Farbe()
        Dim lRow As Long
        Dim i As Long
        Dim CIndex As Long
        Dim bolNichtCopy As Boolean
        lRow = Cells(Rows.Count, 1).End(xlUp).Row
    
        For i = 1 To lRow
            CIndex = Cells(i, 13).Interior.ColorIndex
            If Cells(i, 11) = 0 And Cells(i, 13) <> 0 Then
                bolNichtCopy = False
                For intcount = 1 To 10
                    If Cells(i, intcount).Interior.ColorIndex = Cells(i, 13).Interior.ColorIndex Then
                        bolNichtCopy = True
                        Exit For
                    End If
                Next intcount
                If Not bolNichtCopy Then
                    Cells(i, 13).Copy
                    Cells(i, 11).PasteSpecial Paste:=xlValues
                End If
            End If
        Next i
    End Sub
  4. Führe das Makro aus: Drücke F5 oder gehe zu "Run" > "Run Sub/UserForm".

  5. Überprüfe die Ergebnisse in deiner Excel-Tabelle.


Häufige Fehler und Lösungen

  • Fehler: Klammern bei Bedingungen
    Wenn Du die Bedingung If Not (bolNichtCopy) Then schreibst, sind die Klammern nicht nötig. Es ist eine persönliche Vorliebe.

  • Problem mit bedingten Formatierungen
    Der Code funktioniert nicht, wenn die Zellfarbe durch bedingte Formatierung festgelegt wurde. Stelle sicher, dass die Hintergrundfarbe manuell eingestellt wurde.

  • Leere Zellen prüfen
    Beachte, dass eine Zelle, die 0 enthält, nicht als leer gilt. Verwende Cells(i, 11) = "" für die Prüfung auf leere Zellen.


Alternative Methoden

  • Verwendung von Interior.Color anstelle von ColorIndex
    Du kannst Interior.Color verwenden, um die RGB-Farbe zu überprüfen, was präziser ist, aber möglicherweise komplizierter.

  • Verwendung von Excel-Formeln
    Anstelle von VBA kannst Du auch Excel-Formeln nutzen, um ähnliche Ergebnisse zu erzielen, aber das ist weniger flexibel für komplexe Bedingungen.


Praktische Beispiele

  • Beispiel 1:
    Angenommen, Du hast in Spalte M einen Eintrag mit einer blauen Hintergrundfarbe. Wenn in der gleichen Zeile in Spalte K nichts steht und die Farben in Spalten A bis J nicht blau sind, wird der Eintrag von M nach K kopiert.

  • Beispiel 2:
    Wenn Du mehrere Bedingungen hast, die überprüft werden müssen, kannst Du den Code erweitern, um zusätzliche Farbprüfungen oder andere Regeln zu integrieren.


Tipps für Profis

  • Verwende Option Explicit: Füge am Anfang Deines Moduls Option Explicit hinzu, um sicherzustellen, dass alle Variablen deklariert werden. Das verhindert Fehler und verbessert die Lesbarkeit.

  • Debugging-Tools: Nutze die Debug.Print-Anweisung, um Werte während der Ausführung des Codes zu überprüfen. So kannst Du leichter Fehler finden.

  • Makros sichern: Stelle sicher, dass Du Deine Arbeit regelmäßig speicherst und eine Sicherungskopie Deiner Excel-Datei machst, bevor Du Makros ausführst.


FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehr Spalten zu überprüfen?
Du kannst die Schleife von For intcount = 1 To 10 auf die gewünschte Anzahl von Spalten anpassen.

2. Was soll ich tun, wenn der Code nicht funktioniert?
Überprüfe die Bedingungen und stelle sicher, dass die Farben korrekt eingestellt sind. Führe das Makro Schritt für Schritt im Debug-Modus aus, um den Fehler zu finden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige