Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1140to1144
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

Farben zählen

Farben zählen
SonjaWess
hallo liebe forumsgemeinde,
ich möchte in einer zeile(C5:P5) eine bestimmte farbe, die händisch eingegeben wird,
zählen lassen(z.b. rot,index 3). wenn eben möglich, sollte direkt nach eingabe der farbe
in Q5 die anzahl der mit rot gefüllten zellen angezeigt werden, also automatisch mit Jetzt()
berechnet werden.
in der rechere gibt es zwar viele beispiele zum zählen von hintergrundfarbe, allerdings ist
es mir nicht gelungen, diese für meine zwecke zu gebrauchen.
hoffe es findet sich hier jemand, der mir dabei helfen kann.
lg
sonja

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Farben zählen
03.03.2010 18:32:13
ransi
HAllo Sonja
wenn eben möglich, sollte direkt nach eingabe der farbe
in Q5 die anzahl der mit rot gefüllten zellen angezeigt werden

Das ändern einer Hintergrundfarbe löst keine Aktion aus die man irgendwie für einen Startbefehle eines MAkros nützen könnte.
Mit massivstem API-Einsatz lässt sich da bestimmt über einen Timer irgendein Event zusammenschustern, aber es das lohnt ?
Etwas einfacher ist es wenn du Farbe über einen anderen Dialog ändern würdest.
Option Explicit


Public Sub test()
Dim ColorDlg As Object
Set ColorDlg = CreateObject("MSComDlg.CommonDialog")
On Error Resume Next
With ColorDlg
    .ShowColor
    If Err = 0 Then
        Selection.Interior.Color = .Color
        Call mein_Zählmakro
    End If
End With
End Sub


Public Sub mein_Zählmakro()
MsgBox "mein_Zählmakro angeschubst..."
End Sub


Da könnte man dann eine Auswertung dranhängen.
ransi
Anzeige
AW: Farben zählen
03.03.2010 19:28:23
SonjaWess
hallo ransi,
folgender code (aus einer beispieldatei)in einem modul bringt mir mein gewünschtes ergebnis über abruf eines buttons.
Sub FarbWerte_ermitteln()
Dim FarbWert As Range, DB_FarbWert As Range
Dim AnalyseSpalte As Long, AnalyseZeile As Long
Dim Anzahl As Integer, QuellWert As Integer
For Each FarbWert In Range("Farbwerte")
QuellWert = FarbWert.Interior.ColorIndex
AnalyseSpalte = FarbWert.Column
AnalyseZeile = FarbWert.Row
Anzahl = 0
For Each DB_FarbWert In Range("Datenbereich")
If DB_FarbWert.Interior.ColorIndex = QuellWert Then
Anzahl = Anzahl + 1
End If
Next DB_FarbWert
'das Ergebnis
Cells(AnalyseZeile + 1, AnalyseSpalte).Value = Anzahl
Next FarbWert
End Sub ...dein code mit "FarbWerte_ermitteln" eingefügt, bringt mir jedoch
eine fehlermeldung: Objekterstellung durch activx-komponete nicht möglich...was bedeutet das?
lg
sonja
Option Explicit
Public Sub test() Dim ColorDlg As Object Set ColorDlg = CreateObject("MSComDlg.CommonDialog") On Error Resume Next With ColorDlg .ShowColor If Err = 0 Then Selection.Interior.Color = .Color Call FarbWerte_ermitteln End If End With End Sub
Anzeige
AW: Farben zählen
03.03.2010 21:07:10
ransi
HAllo
bringt mir mein gewünschtes ergebnis über abruf eines buttons...
Über einen Button oder ein Worksheet_Calculate() oder ähnliches so eine Berechnung zu starten ist auch kein Problem.
Das Problem fängt da an wenn dies FarbenZählen sich bei einem Farbwechsel aktualisieren soll.
Und das geht eben nicht ohne Umwege.
eine fehlermeldung: Objekterstellung durch activx-komponete nicht möglich...was bedeutet das?
Eigentlich sollte der mein Code diesen Dialog aufrufen:
Userbild
Sobald du da "OK" drückst, hast du ein Ereigniss das man sofort auswerten kann.
Die Fehlermeldung besagt das die CommonControls auf deinem PC nicht verfügbar sind (glaube ich).
ransi
Anzeige
AW: Farben zählen
03.03.2010 18:44:02
Josef

Hallo Sonja,
Farben zum Zählen, da graust es mir. Farben sind zur Darstellung nicht zum rechnen.
Automatisch geht nicht, weil die Farbänderung keine Ereignis darstellt. Du musst also immer F9 drücken um zu aktualisieren!

Code in einem allgemeinen Modul:
Public Function FarbeAnzahl(ByRef Bereich As Range, ByVal FarbIndex As Integer, Optional Modus As Integer = 0) As Long
  Dim lngTmp As Long
  Dim rng As Range
  
  If FarbIndex <= 0 Or FarbIndex > 56 Then FarbIndex = IIf(Modus = 0, -4142, -4105)
  
  If Modus = 0 Then
    For Each rng In Bereich
      If rng.Interior.ColorIndex = FarbIndex Then lngTmp = lngTmp + 1
    Next
  Else
    For Each rng In Bereich
      If rng.Font.ColorIndex = FarbIndex Then lngTmp = lngTmp + 1
    Next
  End If
  
  FarbeAnzahl = lngTmp
  
End Function


Und in der Tabelle:
 CDEFGHIJKLMNOPQR
4                
5              4 
6                

Formeln der Tabelle
ZelleFormel
Q5=farbeanzahl(C5:P5;3)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Sepp

Anzeige
Automatische Berechnung wenn Farbe geändert ?
03.03.2010 18:52:06
ransi
HAllo HAjo
lese die Farbe in einer seperaten Zelle aus. Dann geht es auch automatisch.
Hm ?
ransi
AW: Automatische Berechnung wenn Farbe geändert ?
03.03.2010 19:06:11
Hajo_Zi
Hallo ransi,
das war ein Fehler von mir, ich dachte es geht.
Gruß Hajo
Anzeige
Auf manuelle Farbeingabe reagiert wie bereits...
04.03.2010 01:19:49
Luc:-?
…gesagt kein Ereignis, Sonja;
du müsstest das schon wie du ja wohl inzwischen auch vorhast mit einer Subroutine machen. Wenn das mit den CommonControls nicht klappt, musst du dir wohl selbst 'n einfaches Menü bauen.
Alternativ kann das auch nur mit Anklicken fktnieren, bspw in Art eines FlipFlops, d.h., solange klicken, bis die richtige Farbe erreicht ist. Das könnte mittels _SelectionChange realisiert wdn. Dabei könnte dann auch gleich die Berechnung mittels Aktivierung der entsprechenden Fml gestartet wdn (.Calculate bzw .Formula = .Formula). Das entspräche dann quasi auch einer etwas qualifizierteren Variante von Hajos Vorschlag… ;-)
Gruß Luc :-?
Anzeige
...Und hier noch ein Bsp wie das fktn kann,...
04.03.2010 22:32:38
Luc:-?
…Sonja…
Userbild
Alles, was in diesem Bsp mit der BedingtFormatierung verbunden ist, kann u.soll nicht Ggstd der nachfolgd PgmCodes sein.
Ins Dokument-Klassenmodul der Tabelle gehört…
Option Explicit
Rem Zum Anpassen an bestehende Bedingg müssen idR nur die Const-Werte geändert wdn!
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Const sigZBer As String = "A2", sigZSel As Long = 1
If Target.Cells.Count 
In ein „normales“ Modul müssen die ff Prozz eingetragen wdn…
Option Explicit
Rem Zum Anpassen an bestehende Bedingg müssen idR nur die Const-Werte geändert wdn!
Sub ColorRotation(zielZ As Range)
Const fIdx As String = "1;6;10;3;5;7", fmlA As Integer = 4, _
fzOs As String = "1;0;1;2", fzOz As String = "0;5;5;5"
Static fx, so, zo As Variant
Dim i As Long, icx As Integer, znr As Integer, fmlZ() As Range
ReDim fmlZ(fmlA - 1) As Range
If IsEmpty(fx) Then _
fx = Split(fIdx, ";"): so = Split(fzOs, ";"): zo = Split(fzOz, ";")
'    fx = Split(fIdx, ";"): so = Split(fzOs, ";"): zo = Split(fzOz, ";") 'f.1.Anleg aktvrn!
icx = zielZ.Interior.ColorIndex
If CBool(InStr(";" & fIdx & ";", ";" & icx & ";")) Then
znr = WorksheetFunction.Match(CStr(icx), fx, 0)
If znr > UBound(fx) Then znr = 0
zielZ.Interior.ColorIndex = fx(znr)
For i = 0 To fmlA - 1
Set fmlZ(i) = zielZ.Offset(zo(i), so(i))
fmlZ(i).Formula = fmlZ(i).Formula
Next i
End If
ReDim fmlZ(0) As Range: Set zielZ = Nothing
End Sub
Function ColorCount(Bereich As Range, FarbIdx As Integer)
Dim x As Range
For Each x In Bereich
If x.Interior.ColorIndex = FarbIdx Then ColorCount = ColorCount + 1
Next x
End Function
Gruß Luc :-?
Anzeige
Bist du das hier, Sonja?
05.03.2010 21:36:39
Luc:-?
Link
Keine Zeit mehr oder weißt du nicht mehr, wo du überall deine Frage gestellt hast?
Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige