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

Forumthread: Summenbildung nach textfarbe

Summenbildung nach textfarbe
05.03.2008 22:44:21
dorn
ich habe mal ne frage zu einer funktion, die es wahrscheinlich so nicht gibt.
=summewenn(Bereich;Suchkriterium) (beipiel zum verständis)
der Bereich sind ca. 96 zeilen in einer spalte, das suchkriterium soll jedoch abhängig von der textfarbe der einzelnen zellen in deisem bereich sein.
ziel soll sein aus einem bereich die summe zu bilden, wo die textfarbe der zelle nur blaue (colorindex=5) und/ oder nur grüne (colorindex=4) ist.
weitere zielstellung: ändert man in dem bereich die textfarbe einer zelle in grün, so soll die summe automatisch sich anpassen ohne das man ein button anklickt ergo ein markro manuell ausführen muss, auch ein makro beim verlassen der zelle ist nicht sinvoll.
kompatibel sollte es ab version 2000 bis 2007 sein.
vielen dank im voraus für lösungen oder denkanstöße
p.s. alternativ käme mir auch der gedanke eine eigene formel zu hinterlegen. anstatt =summe(bereich) mal =eigenesumme(bereich). nur wie und ob dies möglich ist, habe ich zu wenig erfahrung.
mod

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Summenbildung nach textfarbe
05.03.2008 22:57:34
Jens
Hi,
schon mal in die Recherche geschaut? Stichwort: Farbsumme
mfg Jens

AW: Summenbildung nach textfarbe
05.03.2008 23:39:00
Daniel

weitere zielstellung: ändert man in dem bereich die textfarbe einer zelle in grün, so soll die summe automatisch sich anpassen ohne das man ein button anklickt ergo ein markro manuell ausführen muss, auch ein makro beim verlassen der zelle ist nicht sinvoll.


dieses Ziel wirst du wahrscheinlich nicht erreichen (zumindest nicht mit einfachen VBA-Bordmitteln).
das Ändern einer Farbe löst in Excel kein Event aus, daß eine Neuberechnung anstossen könnte.
Gruß, Daniel

Anzeige
AW: Summenbildung nach textfarbe
06.03.2008 07:04:00
haw
Hallo,
ein Beispiel aus der Recherche:

Function SumFarbe(Rng As Range, intColor As Integer) As Double
Dim rngAktuell As Range
Dim dblAddition#
Application.Volatile
For Each rngAktuell In Rng.Cells
If IsNumeric(rngAktuell) Then
If rngAktuell.Font.ColorIndex = intColor Then
dblAddition = dblAddition + rngAktuell.Value
End If
End If
Next rngAktuell
SumFarbe = dblAddition
End Function


Gruß
Heinz

Anzeige
AW: Summenbildung nach textfarbe
06.03.2008 09:18:18
Dorn
Vielen Dank für die Hinweise.
Ein ähnliches Script wie Daniel habe ich nun auch erstellet. (nach mühsamer Studierung von meinen VBA und Excel Büchern.)
Das Script von Daniel ist allerdings ein Tick ausgereifter.

Public Function SumFarbe(Rng As Range, intColor As Integer) As Double
Dim rngAktuell As Range
Dim dblAddition#
Application.Volatile
For Each rngAktuell In Rng.Cells
If IsNumeric(rngAktuell) Then
If rngAktuell.Font.ColorIndex = intColor Then
dblAddition = dblAddition + rngAktuell.Value
End If
End If
Next rngAktuell
SumFarbe = dblAddition
End Function


Nun noch eine kleine Frage zur Funktion:
Ich schreibe über ein Makro die Formel in ein Celle, damit die Celle automatisch rechnen kann:
Worksheets(arbeitsblatt).Cells(rszeile, rsspalte + x).Formula = "=SumFarbe(R[-3]C[0]:R[-" & rswerte + 2 & "]C[0];5)"
Das Problem ist das ein Fehler ausgelösst wird, da das ";" in der Formel stört. Gibt es da Lösungsanätze?
Ich kann zwar für jede Formel eine eigene Function schreiben wie für blau:


Public Function SumFarbe(Rng As Range) As Single
Dim rngAktuell As Range
Dim dblAddition#
Application.Volatile
For Each rngAktuell In Rng.Cells
If IsNumeric(rngAktuell) Then
If rngAktuell.Font.ColorIndex = 5 Then
dblAddition = dblAddition + rngAktuell.Value
End If
End If
Next rngAktuell
SumFarbe = dblAddition
End Function


Und die Schreiberrei übers Makro in die Celle funktioniert dann auch:
Worksheets(arbeitsblatt).Cells(rszeile, rsspalte + x).Formula = "=SumFarbe(R[-3]C[0]:R[-" & rswerte + 2 & "]C[0])"
Aber wie gesagt wenn es nach mir gehen soll, würde ich gerne eine globale Funktion, wie die van Daniel, die ja auch funktioniert, solange man direkt in der Tabelle damit arbeitet.
z.B. =SumFarbe(C3:C98;5)
Vielen Dank

Anzeige
AW: Summenbildung nach textfarbe
06.03.2008 09:34:00
haw
Hallo,
hier im VBE musst du auch statt dem Semikolon ein Komma verwenden.
Ich habe den Macrorecorder angeworfen und der hat das ausgespuckt:
ActiveCell.FormulaR1C1 = "=sumfarbe(RC[-3]:R[11]C[-3],5)"
Gruß
Heinz

AW: Summenbildung nach textfarbe
06.03.2008 14:08:20
Dorn
Vielen Dank für Eure Hilfe!!

AW: Summenbildung nach textfarbe
06.03.2008 09:52:00
Renee
Hi Dorn,
Hier noch ein 3ter Vorschlag, bei dem Du als 2ter Parameter auf eine Zelle referenzieren kannst die das zu summierende Format hat. Z.b. auf eine Zelle die eine Legende enthält, die gleich formatiert ist (in Farbe oder Hintergrund) wie die zu summierenden. Hat den Vorteil, dass der Benutzer die Colorindex Zahlen nicht kenne muss. Der 3te Parameter summiert, wenn nichts oder FALSCH angegeben wird nach der Formatierung der Schriftfarbe, wenn WAHR angegeben wird, nach der Formatierung des Zellenhintergrunds.

Public Function SummeFarbe(Summenbereich As Range, _
ZelleMitderFarbe As Range, _
Optional bFillColor As Boolean = False) As Double
Application.Volatile
Dim rC As Range
For Each rC In Summenbereich
If bFillColor Then
If rC.Interior.ColorIndex = ZelleMitderFarbe.Cells(1, 1).Interior.ColorIndex Then _
SummeFarbe = SummeFarbe + rC.Value
Else
If rC.Font.ColorIndex = ZelleMitderFarbe.Cells(1, 1).Font.ColorIndex Then _
SummeFarbe = SummeFarbe + rC.Value
End If
Next
End Function


Zu Frage wie du eine Formel in eine Zelle schreiben kannst. Da es sich um eine lokale Function handelt, kannst du per VBA nicht in die .Formula schreiben, sondern du musst .FormulaLocal benutzen.
GreetZ Renée

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Summenbildung nach Textfarbe in Excel


Schritt-für-Schritt-Anleitung

Um die Summierung von Zellen basierend auf der Schriftfarbe in Excel durchzuführen, kannst Du eine benutzerdefinierte Funktion in VBA erstellen. Folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  3. Füge folgenden VBA-Code ein:

    Function SumFarbe(Rng As Range, intColor As Integer) As Double
       Dim rngAktuell As Range
       Dim dblAddition As Double
       Application.Volatile
       For Each rngAktuell In Rng.Cells
           If IsNumeric(rngAktuell) Then
               If rngAktuell.Font.ColorIndex = intColor Then
                   dblAddition = dblAddition + rngAktuell.Value
               End If
           End If
       Next rngAktuell
       SumFarbe = dblAddition
    End Function
  4. Schließe den VBA-Editor und gehe zurück zu Deinem Arbeitsblatt.

  5. Du kannst jetzt die Funktion wie folgt verwenden: =SumFarbe(A1:A10; 5), wobei A1:A10 der Bereich ist und 5 der ColorIndex für die Farbe Blau.


Häufige Fehler und Lösungen

  • Excel löst Formel nicht auf: Stelle sicher, dass Du die Funktion korrekt eingegeben hast und die Zellen im angegebenen Bereich numerische Werte enthalten.
  • Fehlermeldung bei Verwendung von Semikolons: Wenn Du eine Formel in VBA schreibst, verwende ein Komma anstelle eines Semikolons. Beispiel:

    ActiveCell.FormulaR1C1 = "=SumFarbe(RC[-3]:R[11]C[-3], 5)"

Alternative Methoden

Eine alternative Möglichkeit besteht darin, eine Funktion zu erstellen, die auch den Hintergrund der Zellen berücksichtigt. Hier ist ein Beispiel:

Public Function SummeFarbe(Summenbereich As Range, ZelleMitderFarbe As Range, Optional bFillColor As Boolean = False) As Double
    Application.Volatile
    Dim rC As Range
    For Each rC In Summenbereich
        If bFillColor Then
            If rC.Interior.ColorIndex = ZelleMitderFarbe.Cells(1, 1).Interior.ColorIndex Then
                SummeFarbe = SummeFarbe + rC.Value
            End If
        Else
            If rC.Font.ColorIndex = ZelleMitderFarbe.Cells(1, 1).Font.ColorIndex Then
                SummeFarbe = SummeFarbe + rC.Value
            End If
        End If
    Next
End Function

Diese Funktion erlaubt es Dir, eine Zelle zu referenzieren, die die gewünschte Farbe hat, sodass Du nicht die ColorIndex-Nummern kennen musst.


Praktische Beispiele

Wenn Du die Funktion SumFarbe verwenden möchtest, um die Summe der Zellen mit roter Schrift zu berechnen, kannst Du das folgendermaßen tun:

=SumFarbe(A1:A10; 3)  '3 entspricht der ColorIndex für Rot

Für die Summierung mit grüner Schrift:

=SumFarbe(A1:A10; 4)  '4 entspricht der ColorIndex für Grün

Tipps für Profis

  • Überlege, ob Du die Funktion in mehreren Arbeitsblättern verwenden möchtest. Du kannst die Funktion in ein Add-In umwandeln, um sie überall zugänglich zu machen.
  • Teste die Funktion gründlich, um sicherzustellen, dass sie in verschiedenen Excel-Versionen (2000 bis 2007) korrekt funktioniert.
  • Bei komplexeren Anforderungen kannst Du die Funktion erweitern, um zusätzliche Kriterien zu berücksichtigen.

FAQ: Häufige Fragen

1. Kann ich die Schriftfarbe in Excel direkt für die Summenbildung verwenden?
Nein, Excel hat keine integrierte Funktion, die die Schriftfarbe für Berechnungen berücksichtigt. Daher ist die Verwendung von VBA erforderlich.

2. Wie kann ich die Funktion für mehrere Farben anpassen?
Du kannst die Funktion so erweitern, dass sie mehrere ColorIndex-Werte als Parameter akzeptiert und entsprechend summiert.

3. Funktioniert das auch in Excel Online?
VBA-Funktionen sind nur in Desktop-Versionen von Excel verfügbar. Excel Online unterstützt keine benutzerdefinierten VBA-Funktionen.

4. Was mache ich, wenn ich die Zellenfarbe ändern möchte und die Summe nicht aktualisiert wird?
Da das Ändern der Farbe kein Ereignis auslöst, musst Du die Berechnung manuell anstoßen oder eine andere Methode verwenden, wie z.B. eine Schaltfläche, um die Berechnungen zu aktualisieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige