Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1240to1244
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

"Rote" Werte summieren - VBA

"Rote" Werte summieren - VBA
Sibylle
Guten Abend,
ab A2 stehen nach unten Werte, die teilweise mit der Schriftfarbe rot ausgestattet sind.
Nun soll in B2 die Summe dieser Werte mit einem Makro ermittelt werden.
Die Anzahl der Werte nach unten ist variabel.
Über einen Ansatz oder gar eine lauffähige Lösung würde ich mich freuen.
Besten Dank im voraus.
Gruß
Sibylle
AW: "Rote" Werte summieren - VBA
21.12.2011 18:23:02
Rudi
Hallo,
1000x gefragt. Suche im Archiv nach Farbsumme.
Gruß
Rudi
"Rote Schrift " Werte summieren mit VBA ...
21.12.2011 18:31:49
Matthias
Hallo Sibylle
Meinst Du so etwas ?
Userbild
Option Explicit
Sub ml()
Const Farbe = 3
Dim Mydbl As Double, c As Range
For Each c In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
If c.Font.ColorIndex = Farbe Then Mydbl = Mydbl + CDbl(c)
Next
MsgBox Mydbl
End Sub
Gruß Matthias
Danke schön
21.12.2011 18:44:13
Sibylle
Hallo Matthias,
besten Dank für Dein Makro, das perfekt funktioniert.
Schön, dass mir nun eine Lösung für dieses Problem zur Verfügung steht.
Einen schönen Abend.
Gruß
Sibylle
Anzeige
Teste das bitte mal ...
21.12.2011 19:00:58
Matthias
Hallo
Schreibe bitte in die absolut letzte Zelle der Spalte(A) eine Zahl und formatiere diese in roter Schrift
Meine Frage: Wird dann diese Zahl mit summiert ?
Ich weiß nicht wieviele Zeilen XL2010 hat
und ob es immernoch Probleme mit der letzten Zelle eine Spalte gibt (jedenfalls in dieser Art der Zeilenfindung)
Sollte diese Zahl dann nicht mit summiert werden, müßte man eine Ausweichvariante probieren.
Wäre nett wenn Du mich darüber informieren würdest.
Gruß Matthias
Und hier das Ergebnis ...
21.12.2011 19:27:36
Sibylle
Hallo Matthias,
schreibt man eine Zahl in roter Schriftfarbe in die Zelle mit der ZeilenNr1048576 (letzte Zelle), dann wird die Summe nicht erhöht, schreibt man eine Zahl in roter Schriftfarbe in die vorletzte Zelle der Spalte A wird die Summe erhöht.
Hilft dies weiter?
Gruß
Sibylle
Anzeige
rote Schrift - Zahlen summieren - neue Version
22.12.2011 05:44:23
Matthias
Hallo Sibylle
Eine letzte benutzte Zelle in Spalte(A) spielt hier nun keine Rolle mehr.
hier einmal mit Kommentierung
Option Explicit
Sub ml()
Dim Bereich As Range, Rng As Range, MyDbl As Double
Const Farbe = 3
Set Bereich = Columns(1).SpecialCells(xlCellTypeConstants, 1) 'nur Zellen mit Zahlen dem  _
Bereich zuweisen
For Each Rng In Bereich 'Schleife über den Bereich schicken
'Abfrage nach roter Schrift - WICHTIG: And Not IsDate(Rng) weil ein Datum auch eine Zahl ist
If Rng.Font.ColorIndex = Farbe And Not IsDate(Rng) Then
Rng.Select 'nur zur Demo - Zeile kann gelöscht werden
MyDbl = MyDbl + CDbl(Rng) 'Werte in der Variable MyDbl summieren
Application.Wait Now + TimeSerial(0, 0, 1) 'nur zur Demo - Zeile kann gelöscht werden
End If
Next
MsgBox MyDbl
Set Bereich = Nothing 'nur der Ordnung wegen ;-)
End Sub


ohne Kommentierung und ohne DemoSelection ;o)
Option Explicit
Sub ml()
Dim Bereich As Range, Rng As Range, MyDbl As Double
Const Farbe = 3
Set Bereich = Columns(1).SpecialCells(xlCellTypeConstants, 1)
For Each Rng In Bereich
If Rng.Font.ColorIndex = Farbe And Not IsDate(Rng) Then MyDbl = MyDbl + CDbl(Rng)
Next
MsgBox MyDbl
Set Bereich = Nothing
End Sub



Grüße auch an NoNet, Rudi, Reinhard, Gerd und die anderen Mitleser
Gruß Matthias
Anzeige
@Matthias : Alternative für LetzteZeile per VBA
21.12.2011 19:52:37
NoNet
Hallo Matthias,
dass die allgemein verwendete Methode zum Ermitteln der letzten belegten Zeile einer Spalte per ".End(xlup).Row" auch unter Excel 2010 nicht anders reagiert als in älteren Versionen klingt logisch, denn schliesslich simuliert diese Anweisung lediglich die Tastenkombination .
Wenn in der letzten Zeile ein Wert enthalten ist, springt diese Tastenkombination an das Ende des Blocks (also : an die nächste Leerzeile oder an die erste Zeile des Blocks mit belegten Zellen).
Sinnvoller ist daher folgende VBA-Alternative (hier : letzte belegte Zeile der Spalte A ermitteln) :
lngLetzeZeile = [A:A].Find(What:="*", After:=[A1], LookIn:=xlFormulas, SearchDirection:=xlPrevious).Row
Gruß, NoNet
Anzeige
AW: Teste das bitte mal ...
21.12.2011 21:36:52
Reinhard
Hallo Matthias,
der Code von NoNet ist sicher zielführend aber ich werde ihn nicht benutzen.
Ich weiß, .End(xlup) hat zwei Probleme. Wenn die unterste zelle in der Spalte belegt ist liefert es die falsche Zelle/zeile zurück.
Genauso wie wenn die Spalte völlig leer ist.
Beide Möglichkeiten sind aber nicht sehr häufig weil zu 99% Daten in der Spalte stehen und auch die tabelle meist nicht bis ganz unten ausgefüllt ist.
Um das sicher zu codieren prüft man halt ab
Zeile= cells(rows.count,1).end(xlup).row +1
If [A1].value="" and Zeile =2 then zeile=1
Analog dazu wenn die unterste Zelle einer Spalte belegt ist.
Also kein Akt und man ist auf der sicheren Seite *glaub*
Gruß
Reinhard
Anzeige
allgemein als UDF
21.12.2011 21:17:21
Rudi
Hallo,
Function Farbsumme(rSum As Range, rRef As Range)
'rSum: zu summierender Bereich
'rRef: Zelle mit zu summierender Schriftfarbe
Dim lngColor As Long, rngC As Range
Dim rngTmp As Range, rngFirst As Range, rngLast As Range
'Bereich auf belegte Zellen einschränken, damit's schneller geht
Set rngLast = rSum.Find(what:="*", after:=rSum(1), searchdirection:=xlPrevious)
Set rngFirst = rSum.Find(what:="*", after:=rngLast, searchdirection:=xlNext)
Set rngTmp = Range(rngFirst, rngLast)
lngColor = rRef(1).Font.Color
For Each rngC In rngTmp
If IsNumeric(rngC) And rngC.Font.Color = lngColor Then
Farbsumme = Farbsumme + rngC
End If
Next
End Function

Gruß
Rudi
Anzeige
AW: "Rote" Werte summieren - VBA
21.12.2011 22:07:11
Gerd
'n Abend,
in einem leeren Bereich läuft die Find-Methode in einen Fehler, wenn direkt auf eine Eigenschaft der Trefferzelle referenziert wird. Also etwas Workaround oder Restrisiko ist immer angesagt.
Gruß Gerd
ist ja kein Akt
21.12.2011 23:56:47
Rudi
Hallo,
schauen wir also, ob Zahlen im Bereich sind.
Function Farbsumme(rSum As Range, rRef As Range)
'rSum: zu summierender Bereich
'rRef: Zelle mit zu summierender Schriftfarbe
Dim lngColor As Long, rngC As Range
Dim rngTmp As Range, rngFirst As Range, rngLast As Range
If Application.Count(rSum) Then
'Bereich auf belegte Zellen einschränken, damit's schneller geht
Set rngLast = rSum.Find(what:="*", after:=rSum(1), searchdirection:=xlPrevious)
Set rngFirst = rSum.Find(what:="*", after:=rngLast, searchdirection:=xlNext)
Set rngTmp = Range(rngFirst, rngLast)
lngColor = rRef(1).Font.Color
For Each rngC In rngTmp
If IsNumeric(rngC) And rngC.Font.Color = lngColor Then
Farbsumme = Farbsumme + rngC
End If
Next
End If
End Function

Gruß
Rudi
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige