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

Forumthread: Hintergrundfarbe und Text auswerten

Hintergrundfarbe und Text auswerten
05.11.2007 11:41:00
Burghard
Hallo,
habe noch ein Problem. Ich möchte in der Spalte "D" des aktiven Tabellenblatts die Zellen zählen, die
a) die Hintergrundfarbe Nr. 8 und den Buchstaben "B" haben
und
b) die Hintergrundfarbe Nr. 8 und den Buchstaben "E" haben
Es soll also zwei Ergebnisse geben.
Die Ausgabe der Ergebnisse soll für a) nach der letzten Zelle und einer Freizeile mit einem Wert in der Spalte D erfolgen.
Die Ausgabe der Ergebnisse soll für b) unter a) in der Spalte D erfolgen.
Ich habe ein Beispiel hochgeladen.
https://www.herber.de/bbs/user/47424.xls
Hilfe wäre nett. Schönen Dank im voraus.
Gruß
Burghard

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Hintergrundfarbe und Text auswerten
05.11.2007 12:02:00
HermannZ
Hallo Burghard;
eine Möglichkeit ist folgende Funktion in ein Modul der Tabelle kopieren;
'Funktion zum auslesen der Farbnummern bei farbigem Hintergrund(keine bedingte Formatierung)
'die Funktion kann in anderen funktionen verwendet werden z.B.SUMME,SUMMENPRODUKT,WENN usw.
'um berechnungen vorzunehmen die als Bedingung einen farbigen Hintergrund oder farbigen Text vorrausetzen.
'Die Funktion kann auch genutzt werden um den Farbindex einer Zelle auszulesen
'Aufruf der Funktion für farbigen Hintergrund =FARBINDEX(Bereich)
'Aufruf der Funktion für farbigen Text =FARBINDEX(Bereich;1)die Eins steht für WAHR
Function FarbIndex(rng As Range, Optional Text As Boolean = False) As Variant
Dim Cell As Range, row As Range
Dim i As Long, j As Long
Dim iWe As Long, iSw As Long
Dim aryFarbe As Variant
Application.Volatile
If rng.Areas.Count > 1 Then
FarbIndex = CVErr(xlErrValue)
Exit Function
End If
iWe = Weiss(rng.Worksheet.Parent)
iSw = Schwarz(rng.Worksheet.Parent)
If rng.Cells.Count = 1 Then
If Text Then
aryFarbe = FarbenIndex(rng, True, iSw)
Else
aryFarbe = FarbenIndex(rng, False, iWe)
End If
Else
aryFarbe = rng.Value
i = 0
For Each row In rng.Rows
i = i + 1
j = 0
For Each Cell In row.Cells
j = j + 1
If Text Then
aryFarbe(i, j) = FarbenIndex(Cell, True, iSw)
Else
aryFarbe(i, j) = FarbenIndex(Cell, False, iWe)
End If
Next Cell
Next row
End If
FarbIndex = aryFarbe
End Function


'Unterfunktion für Weiss

Private Function Weiss(oWB As Workbook) Dim i As Long Weiss = 0 For i = 1 To 56 If oWB.Colors(i) = &HFFFFFF Then Weiss = i Exit Function End If Next i End Function


'Unterfunktion für Schwarz


Private Function Schwarz(oWB As Workbook)
Dim i As Long
Schwarz = 0
For i = 1 To 56
If oWB.Colors(i) = &H0 Then
Schwarz = i
Exit Function
End If
Next i
End Function


'Unterfunktion ob Hintergrundfarbe oder Schriftfarbe


Private Function FarbenIndex(rng As Range, Text As Boolean, idx As Long)
Dim i As Long
If Text Then
i = rng.Font.ColorIndex
Else
i = rng.Interior.ColorIndex
End If
If i 


dann in Zelle D30 folgende Formel;
~f~
{=SUMME(--(FARBINDEX(D1:D28)=FARBINDEX(D2))*(D1:D28="B"))}
Matrix-Formel geschweifte Klammern nicht eingeben sondern die Formel mit Shift-Strg-Enter abschliessen.
Gruss HermannZ

Anzeige
AW: Hintergrundfarbe und Text auswerten
05.11.2007 21:35:42
Burghard
Hallo Hermann,
vielen Dank für Deine Hilfe und große Mühe.
Ich habe zwischenzeitlich etwas gefunden, was super klappt und einfach ist.
Schönen Gruß
Burghard
============================================
Lösung:

Public Function AnzahlB(Bereich As Object) As Double
Dim s As Double
Dim a As Object
Application.Volatile
s = 0
For Each a In Bereich
If a.Interior.ColorIndex = 8 And a.Value = "B" Then
s = s + 1
End If
Next
AnzahlB = s
End Function


==================


Public Function AnzahlE(Bereich As Object) As Double
Dim s As Double
Dim a As Object
Application.Volatile
s = 0
For Each a In Bereich
If a.Interior.ColorIndex = 8 And a.Value = "E" Then
s = s + 1
End If
Next
AnzahlE = s
End Function


=================
Unten in der Spalte D gebe ich dann in zwei Zellen als Funktion ein:
= AnzahlB(D1:D28)
= AnzahlE(D1:D28)

Anzeige
AW: Hintergrundfarbe und Text auswerten
05.11.2007 21:48:00
Josef
Hallo Burghard,
warum machst du die Funktion nicht universeller?
Public Function AnzahlX(Bereich As Range, Farbe As Variant, Text As Variant) As Double
Dim s As Double
Dim a As Range

Application.Volatile

For Each a In Bereich
    If a.Interior.ColorIndex = Farbe And a.Value = Text Then
        s = s + 1
    End If
Next

AnzahlX = s

End Function

Tabelle3

 ABCDE
1a8 a 
2b  b 
3c  a 
4   b 
5   a 
64  c 
72  b 
83  b 
9   c 
10   a 
11   c 
12   c 
13   a 
14   b 
15   a 
16   a 
17   c 
18   b 
19   a 
20     
21     

Formeln der Tabelle
ZelleFormel
A6=anzahlx($D$1:$D$19;$B$1;A1)
A7=anzahlx($D$1:$D$19;$B$1;A2)
A8=anzahlx($D$1:$D$19;$B$1;A3)
Excel Tabellen im Web darstellen  Excel Jeanie HTML
Gruß Sepp

Anzeige
AW: Hintergrundfarbe und Text auswerten
05.11.2007 12:03:00
Beverly
Hi Burghard,
das geht mit einer Hilfsspalte und einem Bereichsnamen.
Name definieren (z.B. Farbe) - Bezieht sich auf: =ZELLE.ZUORDNEN(63;INDIREKT("ZS(-1)";))
In Spalte E diese Formel: =Farbe und nach unten kopieren
In D30: =SUMMENPRODUKT((D1:D28="B")*(E1:E28=8))
In D31: =SUMMENPRODUKT((D1:D28="E")*(E1:E28=8))
________________________________________

Anzeige
AW: Hintergrundfarbe und Text auswerten
05.11.2007 21:36:00
Burghard
Hallo Karin,
vielen Dank für Deine Hilfe und große Mühe.
Ich habe zwischenzeitlich etwas gefunden, was super klappt und einfach ist.
Schönen Gruß
Burghard
============================================
Lösung:

Public Function AnzahlB(Bereich As Object) As Double
Dim s As Double
Dim a As Object
Application.Volatile
s = 0
For Each a In Bereich
If a.Interior.ColorIndex = 8 And a.Value = "B" Then
s = s + 1
End If
Next
AnzahlB = s
End Function


==================


Public Function AnzahlE(Bereich As Object) As Double
Dim s As Double
Dim a As Object
Application.Volatile
s = 0
For Each a In Bereich
If a.Interior.ColorIndex = 8 And a.Value = "E" Then
s = s + 1
End If
Next
AnzahlE = s
End Function


=================
Unten in der Spalte D gebe ich dann in zwei Zellen als Funktion ein:
= AnzahlB(D1:D28)
= AnzahlE(D1:D28)

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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