Supportnet / Forum / Tabellenkalkulation
Werte zusammenrechnen in Abhängigkeit von ihrer Farbe
Frage
Ich möchte gerne in einer Excel Liste Werte in Abhängigkeit von ihrer Farbe zusammenrechnen. In einer Spalte haben die Summen (Geld) bei mir unterschiedliche Farben.
Excel soll nun alle Werte zusammenrechnen, deren Schriftfarbe schwarz ist.
Ich habe das probiert:
Summewenn(A2:A10;Font.Colorindex=0)
Damit bekomme ich aber nur Null als Ergebnis.
Kann mir jemand helfen??
Vielen Dank
Antwort 1 von Saarbauer
Hallo,
ist nach meinem Kenntnisstand nur mit VBA möglich.
Gruß
Helmut
ist nach meinem Kenntnisstand nur mit VBA möglich.
Gruß
Helmut
Antwort 2 von Hajo_Zi
Hallo Helmut,
nein es geht auch ohne mit der Funktion
ZELLE.ZUORDNEN
Es ist mir aber zu aufwendig das zu beschreiben und die Datei auf meinem Speicherplatz im Internet darf nicht verlinkt werden und HTML wird im Forum nicht unterstützt.
Gruß Hajo
nein es geht auch ohne mit der Funktion
ZELLE.ZUORDNEN
Es ist mir aber zu aufwendig das zu beschreiben und die Datei auf meinem Speicherplatz im Internet darf nicht verlinkt werden und HTML wird im Forum nicht unterstützt.
Gruß Hajo
Antwort 3 von nighty
hi all :)
eine benutzerdefinierte function
gruss nighty
einzufuegen alt f11 einfuegen modul ,nun unter einfuegen function verfuegbar ist
Rem =SumFontColor(A1:A3;-4105)
Rem -4105 waere schwarz
Function SumFontColor(Zellen As Range, farbe As Long) As Double
Application.Volatile
Dim Zelle As Range
SumFontColor = 0
For Each Zelle In Zellen
If Zelle.Font.ColorIndex = farbe Then
SumFontColor = SumFontColor + Zelle.Value
End If
Next
End Function
rem hier ein kleines makro um den farbindex der jeweiligen farbe zu ermitteln
Sub FontColorAuslesen()
Range("B1") = Range("A1").Font.ColorIndex
End Sub
eine benutzerdefinierte function
gruss nighty
einzufuegen alt f11 einfuegen modul ,nun unter einfuegen function verfuegbar ist
Rem =SumFontColor(A1:A3;-4105)
Rem -4105 waere schwarz
Function SumFontColor(Zellen As Range, farbe As Long) As Double
Application.Volatile
Dim Zelle As Range
SumFontColor = 0
For Each Zelle In Zellen
If Zelle.Font.ColorIndex = farbe Then
SumFontColor = SumFontColor + Zelle.Value
End If
Next
End Function
rem hier ein kleines makro um den farbindex der jeweiligen farbe zu ermitteln
Sub FontColorAuslesen()
Range("B1") = Range("A1").Font.ColorIndex
End Sub
Antwort 4 von CaroS
Hallo allerseits,
ich würde das Problem mal von einer anderen Seite her betrachten. Dabei könnte es um so etwas gehen wie ein Haushaltsbuch oder etwas ähnliches betriebswirtschaft-liches. Es gibt eine Menge Posten von Ausgaben oder was auch immer, die irhendwelchen Kostenstellen, Sachgebieten o. ä. zugeordnet werden können. Damit diese Zuordnung überhaupt möglich ist, muss zu jedem Posten entweder ein Kriterium in der Tabelle vorhanden sein, damit man die Zuordnung per Formel oder Makro auf automatischem Wege erledigen kann, oder der Benutzer muss es für jeden Posten per Hand selbst tun. (Zelle markieren, Farbpalette öffnen, Farbe auswählen, anklicken.) Letzteres ist unwahrscheinlich.
Bisher scheint der Stand der Dinge zu sein, dass man das Kriterium (oder sein Urteilsvermögen) dazu benutzt, den Zellen des jeweiligen Postens eine bestimmte Schriftfarbe (oder sonstige Attribute) zu geben. Anschließend soll mit einiger (zusätzlicher) Mühe versucht werden, zu jeder nun durch Farbgebung entstandenen Gruppierung eine Summe zu bilden und dabei das Attribut Schriftfarbe auszuwerten.
Kann man das nicht eleganter und vor allem einfacher lösen, indem man das Kriterium - wenn vorhanden - noch ein zweites Mal für die Summenbildung benutzt, aalso nicht nur die Färbung vornimmt, sondern auch gleich noch die Summe mit berechnet?
Der direkte Zugriff auf ein in Form von Daten vorhandenes Kriterium würde auch die Frage (und damit weiteren Aufwand) ersparen, ob die Schriftfarbe durch Zellformatierung oder durch bedingte Formatierung zustande gekommen ist.
Die Fragen lauten also: gibt es für die Zuordnung der Posten Kriterien in Form von Daten im Tabellenblatt, wie werden die Farben zugeordnet (Makro / bedingte Formatierung / ?), wie lauten die Bedingungen genau?
Wäre die Lösung des Problems auf diese Weise möglich (und gewünscht)?
Gruß,
CaroS
ich würde das Problem mal von einer anderen Seite her betrachten. Dabei könnte es um so etwas gehen wie ein Haushaltsbuch oder etwas ähnliches betriebswirtschaft-liches. Es gibt eine Menge Posten von Ausgaben oder was auch immer, die irhendwelchen Kostenstellen, Sachgebieten o. ä. zugeordnet werden können. Damit diese Zuordnung überhaupt möglich ist, muss zu jedem Posten entweder ein Kriterium in der Tabelle vorhanden sein, damit man die Zuordnung per Formel oder Makro auf automatischem Wege erledigen kann, oder der Benutzer muss es für jeden Posten per Hand selbst tun. (Zelle markieren, Farbpalette öffnen, Farbe auswählen, anklicken.) Letzteres ist unwahrscheinlich.
Bisher scheint der Stand der Dinge zu sein, dass man das Kriterium (oder sein Urteilsvermögen) dazu benutzt, den Zellen des jeweiligen Postens eine bestimmte Schriftfarbe (oder sonstige Attribute) zu geben. Anschließend soll mit einiger (zusätzlicher) Mühe versucht werden, zu jeder nun durch Farbgebung entstandenen Gruppierung eine Summe zu bilden und dabei das Attribut Schriftfarbe auszuwerten.
Kann man das nicht eleganter und vor allem einfacher lösen, indem man das Kriterium - wenn vorhanden - noch ein zweites Mal für die Summenbildung benutzt, aalso nicht nur die Färbung vornimmt, sondern auch gleich noch die Summe mit berechnet?
Der direkte Zugriff auf ein in Form von Daten vorhandenes Kriterium würde auch die Frage (und damit weiteren Aufwand) ersparen, ob die Schriftfarbe durch Zellformatierung oder durch bedingte Formatierung zustande gekommen ist.
Die Fragen lauten also: gibt es für die Zuordnung der Posten Kriterien in Form von Daten im Tabellenblatt, wie werden die Farben zugeordnet (Makro / bedingte Formatierung / ?), wie lauten die Bedingungen genau?
Wäre die Lösung des Problems auf diese Weise möglich (und gewünscht)?
Gruß,
CaroS
Antwort 5 von Wolfine
Es ist so, dass ich die Farbe manuell eingebe. Es geht draum (betriebswirtschaftlich) zu ermitteln, welche Summen, noch bezahlt werden müssen.
Die Summen, die noch nicht bezahlt sind, sind schwarz, und sollen gerechnet werden.
Sobald ich eine Summe grün färbe, soll diese nicht mehr in die Summe mitreingerechnet werden.
Also in Sprache:
Wenn die Farbe des Betrags = 0 (schwarz), dann bilde die Summe in der Zeile A1:A10.
Wenn die Farbe des Betrags grün, dann soll es nicht mehr gerechtet werden.
Danke für die zahlreiche Beteiligung.
Die Summen, die noch nicht bezahlt sind, sind schwarz, und sollen gerechnet werden.
Sobald ich eine Summe grün färbe, soll diese nicht mehr in die Summe mitreingerechnet werden.
Also in Sprache:
Wenn die Farbe des Betrags = 0 (schwarz), dann bilde die Summe in der Zeile A1:A10.
Wenn die Farbe des Betrags grün, dann soll es nicht mehr gerechtet werden.
Danke für die zahlreiche Beteiligung.
Antwort 6 von CaroS
Hallo Wolfine,
bei diesem Makro musst Du oben angeben, in welcher Spalte von welcher bis zu welcher Zeile addiert werden soll und wohin das Ergebnis geschrieben werden soll. Dann werden alle Werte addiert, die entweder die Standardschriftfarbe ´Automatisch´ (= ColorIndex -4105) oder die Schriftfarbe ´schwarz´ (= ColorIndex 1) haben.
Sub Summe_schwarz()
Dim s As Byte, se As Byte, sum As Double, z As Long
Rem --- Voreinstellungen ---
Const spalte As String = "A"
Const von_zeile As Long = 1
Const bis_zeile As Long = 10
Const ergebnis_zelle As String = "A11"
Rem --- Voreinstellungen ---
s = Asc(UCase(spalte)) - 64
sum = 0
For z = von_zeile To bis_zeile
If ActiveSheet.Cells(z, s).Font.ColorIndex <= 1 Then sum = sum + ActiveSheet.Cells(z, s).Value
Next z
ActiveSheet.Range(ergebnis_zelle).Value = sum
End Sub
Gruß,
CaroS
bei diesem Makro musst Du oben angeben, in welcher Spalte von welcher bis zu welcher Zeile addiert werden soll und wohin das Ergebnis geschrieben werden soll. Dann werden alle Werte addiert, die entweder die Standardschriftfarbe ´Automatisch´ (= ColorIndex -4105) oder die Schriftfarbe ´schwarz´ (= ColorIndex 1) haben.
Sub Summe_schwarz()
Dim s As Byte, se As Byte, sum As Double, z As Long
Rem --- Voreinstellungen ---
Const spalte As String = "A"
Const von_zeile As Long = 1
Const bis_zeile As Long = 10
Const ergebnis_zelle As String = "A11"
Rem --- Voreinstellungen ---
s = Asc(UCase(spalte)) - 64
sum = 0
For z = von_zeile To bis_zeile
If ActiveSheet.Cells(z, s).Font.ColorIndex <= 1 Then sum = sum + ActiveSheet.Cells(z, s).Value
Next z
ActiveSheet.Range(ergebnis_zelle).Value = sum
End Sub
Gruß,
CaroS
Antwort 7 von nok106
Hallo CaroS,
AW6, dazu einige Fragen:
Kann man das Makro auch abändern, so das es für mehrere Spalten zuverwenden wäre ?
In welche Zeilen müßte man die Änderungen vornehmen ?
Ich würde mich freuen, wenn du mir da helfen könntest.
Einstweilen herzlichen Dank.
Gruß
Odje
AW6, dazu einige Fragen:
Kann man das Makro auch abändern, so das es für mehrere Spalten zuverwenden wäre ?
In welche Zeilen müßte man die Änderungen vornehmen ?
Ich würde mich freuen, wenn du mir da helfen könntest.
Einstweilen herzlichen Dank.
Gruß
Odje
Antwort 8 von CaroS
Hallo ,
ich nehme mal an, Du kommst klar damit. Ich habe die zusätzlich benötigten Voreinstellungen oben und eine Schleife für die Spalten eingefügt (fett) und angepasst.
Um es etwas weniger kompliziert zu machen könnte man auch gleich anstelle der Spaltenbuchstaben die Spaltennummern als Zahlen angeben.
Sub Summe_schwarz_2()
Dim s As Byte, von_sp As Byte, bis_sp As Byte, se As Byte, sum As Double, z As Long
Rem --- Voreinstellungen ---
Const von_spalte As String = "A"
Const bis_spalte As String = "C"
Const von_zeile As Long = 1
Const bis_zeile As Long = 10
Const ergebnis_zelle As String = "A11"
Rem --- Voreinstellungen ---
von_sp = Asc(UCase(von_spalte)) - 64
bis_sp = Asc(UCase(bis_spalte)) - 64
sum = 0
For z = von_zeile To bis_zeile
For s = von_sp To bis_sp
If ActiveSheet.Cells(z, s).Font.ColorIndex <= 1 Then sum = sum + ActiveSheet.Cells(z, s).Value
Next s
Next z
ActiveSheet.Range(ergebnis_zelle).Value = sum
End Sub
Sub Summe_schwarz_3()
Dim s As Byte, se As Byte, sum As Double, z As Long
Rem --- Voreinstellungen ---
Const von_spalte As Byte = 1
Const bis_spalte As Byte = 3
Const von_zeile As Long = 1
Const bis_zeile As Long = 10
Const ergebnis_zelle As String = "A11"
Rem --- Voreinstellungen ---
sum = 0
For z = von_zeile To bis_zeile
For s = von_spalte To bis_spalte
If ActiveSheet.Cells(z, s).Font.ColorIndex <= 1 Then sum = sum + ActiveSheet.Cells(z, s).Value
Next s
Next z
ActiveSheet.Range(ergebnis_zelle).Value = sum
End Sub
Gruß,
CaroS
ich nehme mal an, Du kommst klar damit. Ich habe die zusätzlich benötigten Voreinstellungen oben und eine Schleife für die Spalten eingefügt (fett) und angepasst.
Um es etwas weniger kompliziert zu machen könnte man auch gleich anstelle der Spaltenbuchstaben die Spaltennummern als Zahlen angeben.
Sub Summe_schwarz_2()
Dim s As Byte, von_sp As Byte, bis_sp As Byte, se As Byte, sum As Double, z As Long
Rem --- Voreinstellungen ---
Const von_spalte As String = "A"
Const bis_spalte As String = "C"
Const von_zeile As Long = 1
Const bis_zeile As Long = 10
Const ergebnis_zelle As String = "A11"
Rem --- Voreinstellungen ---
von_sp = Asc(UCase(von_spalte)) - 64
bis_sp = Asc(UCase(bis_spalte)) - 64
sum = 0
For z = von_zeile To bis_zeile
For s = von_sp To bis_sp
If ActiveSheet.Cells(z, s).Font.ColorIndex <= 1 Then sum = sum + ActiveSheet.Cells(z, s).Value
Next s
Next z
ActiveSheet.Range(ergebnis_zelle).Value = sum
End Sub
Sub Summe_schwarz_3()
Dim s As Byte, se As Byte, sum As Double, z As Long
Rem --- Voreinstellungen ---
Const von_spalte As Byte = 1
Const bis_spalte As Byte = 3
Const von_zeile As Long = 1
Const bis_zeile As Long = 10
Const ergebnis_zelle As String = "A11"
Rem --- Voreinstellungen ---
sum = 0
For z = von_zeile To bis_zeile
For s = von_spalte To bis_spalte
If ActiveSheet.Cells(z, s).Font.ColorIndex <= 1 Then sum = sum + ActiveSheet.Cells(z, s).Value
Next s
Next z
ActiveSheet.Range(ergebnis_zelle).Value = sum
End Sub
Gruß,
CaroS
Antwort 9 von nok106
Hallo CaroS,
ich bedanke mich für deine Hilfe.
Hat alles exakt funktioniert, keine Probleme.
Ich wünsche noch ein schönes Wochenende.
Gruß
Odje
ich bedanke mich für deine Hilfe.
Hat alles exakt funktioniert, keine Probleme.
Ich wünsche noch ein schönes Wochenende.
Gruß
Odje

