Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zelleninhalte bestimmte Farbe kopieren?

Zelleninhalte bestimmte Farbe kopieren?
30.12.2006 23:50:13
Selma
Hallo Leute,
ich möchte gern nur die Zelleninhalte (aus der Spalte A) die mit der rote Hintergrundfarbe dargestellt sind in Arbeitsblatt "Export" in Spalte A kopieren.
Wie mache ich das per VBA?
Vielen Dank im Voraus...
Liebe Grüße
SELMA
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zelleninhalte bestimmte Farbe kopieren?
31.12.2006 13:41:47
Beni
Hallo Selma,
kopiere diesen Code in ein Modul und starte es aus der Datentabelle laufen mit Alt+F8
Gruss Beni

Sub Zelleninhalte_bestimmte_Farbe_kopieren()
With Sheets("Export")
For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1).Interior.ColorIndex = 3 Then
lz = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(i, 1).Copy .Cells(lz, 1)
End If
Next i
End With
End Sub

Anzeige
AW: Zelleninhalte bestimmte Farbe kopieren?
01.01.2007 03:24:12
Selma
Hallo Beni,
die Datentabelle hat über 40000 Zeilen. Das Makro habe ich gestartet und ist noch nicht fertig. Es läuft schon über eine halbe Stunde.
LG
Selma
AW: Zelleninhalte bestimmte Farbe kopieren?
01.01.2007 13:17:14
Beni
Hallo Selma,
wenn die Screenaktualisierung ausgeschaltet ist, gehts schneller.
Gruss Beni

Sub Zelleninhalte_bestimmte_Farbe_kopieren()
Dim i, lz As Long
Application.ScreenUpdating = False ' schaltet die Screenaktualisierung aus
With Sheets("Export")
For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1).Interior.ColorIndex = 3 Then
lz = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(lz, 1) = Cells(i, 1) ' ohne Formatübertrag
End If
Next i
End With
Application.ScreenUpdating = True ' schaltet die Screenaktualisierung ein
End Sub

Anzeige
AW: Zelleninhalte bestimmte Farbe kopieren?
01.01.2007 17:04:44
Erich
Hallo Selma,
so sollte es noch einen Tick schneller gehen:
Option Explicit
Sub KopiereRotA()
Dim lngQ As Long, intS As Integer, rngF As Range, lngB As Long, lngZ As Long
Dim Calc As XlCalculation
Calc = Application.Calculation: Beschleuniger xlCalculationManual
lngQ = Cells(Rows.Count, 1).End(xlUp).Row
intS = Cells(1, Columns.Count).End(xlToLeft).Column
Cells(1, intS + 1).Select
ActiveWorkbook.Names.Add Name:="Farb", RefersToR1C1:= _
"=IF(GET.CELL(63,Tabelle1!RC[-10])=3,0,1)"
Range(Cells(1, intS + 1), Cells(lngQ, intS + 1)).Formula = "=Farb"
Range(Cells(1, intS + 2), Cells(lngQ, intS + 2)).Formula = "=ROW()"
ActiveSheet.Calculate
Range(Cells(1, intS + 2), Cells(lngQ, intS + 2)) = _
Range(Cells(1, intS + 2), Cells(lngQ, intS + 2)).Value
Cells(1, 1).Sort Key1:=Cells(1, intS + 1), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, Orientation:=xlTopToBottom
Set rngF = Columns(intS + 1).Find(What:=1, After:=Cells(lngQ, intS + 1), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, SearchFormat:=False)
If rngF Is Nothing Then lngB = lngQ Else lngB = rngF.Row - 1
If lngB > 0 Then
With Sheets("Export")
lngZ = .Cells(Rows.Count, 1).End(xlUp).Row + 1
If IsEmpty(.Cells(lngZ, 1)) Then lngZ = 1
Range(Cells(1, 1), Cells(lngB, intS)).Copy Sheets("Export").Cells(lngZ, 1)
If lngB < lngQ Then _
Cells(1, 1).Sort Key1:=Cells(1, intS + 2), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, Orientation:=xlTopToBottom
End With
End If
Range(Columns(intS + 1), Columns(intS + 2)).Delete
ActiveWorkbook.Names("Farb").Delete
Beschleuniger Calc
End Sub
'   Beschleuniger _______ Parameter: Calc-Status ______ gi/12.03.2006
'Aufruf:
'   Dim Calc As XlCalculation
'   Calc = Application.Calculation: Beschleuniger xlCalculationManual
'   ....Code....
'   Beschleuniger Calc
Sub Beschleuniger(StatCal As XlCalculation)
Application.Calculation = StatCal
Application.ScreenUpdating = (StatCal <> xlCalculationManual)
End Sub
Rückmeldung wäre nett! - Erich aus Kamp-Lintfort wünscht allen einen guten Start ins neue Jahr!
Anzeige
AW: Zelleninhalte bestimmte Farbe kopieren?
01.01.2007 17:10:57
Erich
Hallo Selma,
habe gerade gemerkt, dass mein Makro viel zu viel tut - es sollten ja nur die Zellen aus Spalte A kopiert werden.
Ersetze bitte die Zeile mit dem Copy durch
         Range(Cells(1, 1), Cells(lngB, 1)).Copy .Cells(lngZ, 1)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: gefärbte Zellen kopieren - Korrektur
01.01.2007 17:33:49
Erich
Hallo Selma,
sorry, da war noch ein Fehler drin (bei der Namendefinition). Also noch mal:
Option Explicit
Sub KopiereRotA()
Dim lngQ As Long, intS As Integer, rngF As Range, lngB As Long, lngZ As Long
Dim Calc As XlCalculation
Calc = Application.Calculation: Beschleuniger xlCalculationManual
lngQ = Cells(Rows.Count, 1).End(xlUp).Row
intS = Cells(1, Columns.Count).End(xlToLeft).Column
Cells(1, intS + 1).Select
ActiveWorkbook.Names.Add Name:="Farb", RefersToR1C1:= _
"=IF(GET.CELL(63,Tabelle1!RC[-" & intS & "])=3,0,1)"
Range(Cells(1, intS + 1), Cells(lngQ, intS + 1)).Formula = "=Farb"
Range(Cells(1, intS + 2), Cells(lngQ, intS + 2)).Formula = "=ROW()"
ActiveSheet.Calculate
Range(Cells(1, intS + 2), Cells(lngQ, intS + 2)) = _
Range(Cells(1, intS + 2), Cells(lngQ, intS + 2)).Value
Cells(1, 1).Sort Key1:=Cells(1, intS + 1), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, Orientation:=xlTopToBottom
Set rngF = Columns(intS + 1).Find(What:=1, After:=Cells(lngQ, intS + 1), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, SearchFormat:=False)
If rngF Is Nothing Then lngB = lngQ Else lngB = rngF.Row - 1
If lngB > 0 Then
With Sheets("Export")
lngZ = .Cells(Rows.Count, 1).End(xlUp).Row + 1
If IsEmpty(.Cells(lngZ, 1)) Then lngZ = 1
'        Range(Cells(1, 1), Cells(lngB, intS)).Copy .Cells(lngZ, 1)  ' ganze Zeilen
'        Range(Cells(1, 1), Cells(lngB, 1)).Copy .Cells(lngZ, 1)     ' nur Spalte A
'        Range(.Cells(lngZ, 1), .Cells(lngZ + lngB - 1, intS)) = _
Range(Cells(1, 1), Cells(lngB, intS)).Value              ' Werte, ganze Zeilen
Range(.Cells(lngZ, 1), .Cells(lngZ + lngB - 1, 1)) = _
Range(Cells(1, 1), Cells(lngB, 1)).Value                 ' Werte, nur Spalte A
If lngB < lngQ Then _
Cells(1, 1).Sort Key1:=Cells(1, intS + 2), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, Orientation:=xlTopToBottom
End With
End If
Range(Columns(intS + 1), Columns(intS + 2)).Delete
ActiveWorkbook.Names("Farb").Delete
Beschleuniger Calc
End Sub
'   Beschleuniger _______ Parameter: Calc-Status ______ gi/12.03.2006
'Aufruf:
'   Dim Calc As XlCalculation
'   Calc = Application.Calculation: Beschleuniger xlCalculationManual
'   ....Code....
'   Beschleuniger Calc
Sub Beschleuniger(StatCal As XlCalculation)
Application.Calculation = StatCal
Application.ScreenUpdating = (StatCal <> xlCalculationManual)
End Sub
Unten kannst du dir aussuchen, ob du komplette Zellen oder nur Werte bzw. ganze Zeilen oder nur Spalte A kopieren willst.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: gefärbte Zellen kopieren - Korrektur
02.01.2007 02:41:59
Selma
Vielen Dank Beni,
vielen Dank Erich
LG
Selma
;
Anzeige
Anzeige

Infobox / Tutorial

Zelleninhalte nach Hintergrundfarbe kopieren


Schritt-für-Schritt-Anleitung

Um Zelleninhalte aus einem Arbeitsblatt zu kopieren, die eine bestimmte Hintergrundfarbe haben, kannst du ein VBA-Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke Alt + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Sub Zelleninhalte_bestimmte_Farbe_kopieren()
       Dim i As Long, lz As Long
       Application.ScreenUpdating = False ' Deaktiviere die Bildschirmaktualisierung
       With Sheets("Export")
           For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row
               If Cells(i, 1).Interior.ColorIndex = 3 Then ' Index 3 entspricht roter Farbe
                   lz = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                   .Cells(lz, 1) = Cells(i, 1) ' Nur den Wert kopieren
               End If
           Next i
       End With
       Application.ScreenUpdating = True ' Aktiviere die Bildschirmaktualisierung
    End Sub
  4. Starte das Makro:

    • Gehe zurück zu Excel, drücke Alt + F8, wähle das Makro aus und klicke auf Ausführen.

Mit diesem Makro kannst du effektiv die Zelleninhalte, die eine bestimmte Füllfarbe haben, kopieren.


Häufige Fehler und Lösungen

  • Das Makro läuft zu langsam: Deaktiviere die Bildschirmaktualisierung, wie im Code gezeigt, um die Ausführung zu beschleunigen.
  • Es werden nicht alle Zellen kopiert: Stelle sicher, dass du den richtigen ColorIndex verwendest. Der ColorIndex für Rot ist 3.
  • Das Makro funktioniert nicht auf großen Datenmengen: Überprüfe die Anzahl der Zeilen und teste die Performance des Codes.

Alternative Methoden

Eine weitere Möglichkeit, Zelleninhalte mit einer bestimmten Farbe zu kopieren, ist die Verwendung von Excel-Formeln oder bedingter Formatierung. Diese Methoden sind jedoch weniger flexibel als die VBA-Lösung.

  • Bedingte Formatierung: Du kannst Zellen farblich hervorheben, basierend auf bestimmten Bedingungen, jedoch nicht direkt zur Kopie verwenden.
  • Excel-Filter: Mit den Autofilter-Optionen kannst du nach gefärbten Zellen filtern, um dann manuell zu kopieren.

Praktische Beispiele

Hier sind einige Beispiele, wie du die VBA-Methode anpassen kannst:

  1. Kopieren von Zellen mit blauer Farbe: Ändere If Cells(i, 1).Interior.ColorIndex = 3 zu If Cells(i, 1).Interior.ColorIndex = 5 (Index 5 entspricht Blau).

  2. Kopieren von Werten statt formatierten Zellen: Verwende .Cells(lz, 1) = Cells(i, 1).Value, um nur die Werte zu kopieren und nicht die Formatierung.


Tipps für Profis

  • Nutze Application.Calculation = xlCalculationManual, um die Berechnung während des Kopierens zu deaktivieren, was die Geschwindigkeit erhöhen kann.
  • Füge Fehlerbehandlungsroutinen hinzu, um dein Makro robuster zu machen, indem du On Error Resume Next verwendest.
  • Teste dein Makro immer zunächst an einer Kopie deiner Daten, um unerwartete Ergebnisse zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich die Hintergrundfarbe ändern, die ich kopieren möchte?
Ändere einfach den ColorIndex im Code, um die Farbe zu wählen, die du kopieren möchtest.

2. Kann ich das Makro für andere Arbeitsblätter verwenden?
Ja, passe den Namen des Arbeitsblatts in der Zeile With Sheets("Export") an, um ein anderes Arbeitsblatt zu verwenden.

3. Was mache ich, wenn ich nur die Formatierung und nicht die Werte kopieren möchte?
Verwende .Cells(lz, 1).PasteSpecial Paste:=xlPasteFormats, um nur die Formatierungen zu kopieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige