Microsoft Excel

Herbers Excel/VBA-Archiv

Projektplan

Betrifft: Projektplan von: Jan
Geschrieben am: 18.02.2016 18:32:17

Hallo liebe Gemeinde,

ich habe schon oft in das Forum schauen dürfen und mir Tips und Tricks abschauen können. Einfach genial das Forum.

Jetzt bin ich an einen Punkt angekommen wo ich nicht mehr weiter komme.

Ich möchte in eine 2016er Liste mit verschieden farbigen Einträgen Zellen über den Jahreskalender pro Woche erfassen. Also ich habe 5 Zeilen mit Aktivitäten die sich pro Woche (Spalten) ändern. Hier möchte ich jetzt die farbigen Zellen zählen lassen. Pro Woche gibt es verschiedene aber auch wiederkehrende Farben.

Ich habe es schon mit =SUMME(ZÄHLENWENN(I12:M19;{"*X*";"*GL*"}))+(ANZAHL(I12:M19))
probiert aber leider zählt er nicht alle Felder. Dazu sei noch gesagt das die farbigen Zellen auch manchmal Zahlen enthalten.

Über jede Hilfe wäre ich dankbar.

Gruß Jan

  

Betrifft: AW: vermeide farbige Zellen zu zählen ... von: ... neopa C
Geschrieben am: 18.02.2016 19:47:50

Hallo Jan,

... definiere alles was Du auswerten willst möglichst nur über Zahlen- und/oder Textwerte.

Gruß Werner
.. , - ...


  

Betrifft: Direkt formatierte farbige Zellen zu zählen, ... von: Luc:-?
Geschrieben am: 18.02.2016 22:03:04

…ist per VBA nicht besonders schwer, Jan,
wenn die Farben permanent sind. Anderenfalls müsste die Zähl-UDF volatil sein und durch irgendeine ZellwertAktion angestoßen wdn. Eine SubProzedur müsste dann ohnehin stets neu gestartet wdn.
Das Gleiche gilt ab Xl14/2010 für Farben aus BedingtFormatierung (in Versionen davor wär's zu kompliziert für dich).
Soche FarbZählFktt (UDFs) gibt's bereits im Netz.
Gruß, Luc :-?

Besser informiert mit …


  

Betrifft: AW: Projektplan von: Jan
Geschrieben am: 22.02.2016 01:20:35

Hallo und vielen Dank für die schnellen Antworten.
@ neopa C leider habe muss ich mit der mir vorgegebenen Liste weiterarbeiten eine Änderung ist so nicht möglich es bleibt bei Farben mit Zeichen.
@ Luc:-? habe versucht mit deinem Hinweis über VBA den Einstig zu finden noch keine Lösung gefunden. Ich bin dabei mir etwas mehr VB wissen an zu lernen, komme so aber auch nicht recht weiter. Gibt es nicht noch eine andere Lösung?


  

Betrifft: Projektplan - Farben zählen bzw Summe nach Farben von: Luc:-?
Geschrieben am: 23.02.2016 02:39:25

Morrn, Jan;
habe mal ein Bsp dafür gefertigt, was ab deiner XlVersion 14/2010 möglich wäre. Hier wdn allerdings Summen nach Farben gebildet, aber das könntest du ja evtl anpassen:

 KLMNOPQ
5560Zellfarbe (K55): 65535, bedingt: 255real: 65535background-color:#FFFF00
5644Zellfarbe (K56): 16777215, bedingt: 255real: 255background-color:#FF0000
5743Zellfarbe (K57): 65535, bedingt: 255real: 255background-color:#FF0000
5844Zellfarbe (K58): 16777215, bedingt: 255real: 255background-color:#FF0000
5945Zellfarbe (K59): 65535, bedingt: 255real: 65535background-color:#FFFF00
60Summen:      
61105{=1^JETZT()*SUMME(MTRANS(TxEval(MTRANS(WECHSELN("CellColor(K#)";"#";ZEILE(A$55:A$59))&T(ZEILE(A1:A5))))=65535)*K55:K59)}
62131{=1^JETZT()*SUMME(MTRANS(TxEval(MTRANS(WECHSELN("CellColor(K#)";"#";ZEILE(A$55:A$59))&T(ZEILE(A1:A5))))=255)*K55:K59)}
63105105{=1^JETZT()*SUMME((ZFarbe=65535)*K55:K59)}duale (quasi-1-zellige)
64131131{=1^JETZT()*SUMME((ZFarbe=255)*K55:K59)} benannte MatrixFormeln
65ZFarbe:=MTRANS(AUSWERTEN(MTRANS(WECHSELN("CellColor(K#)";"#";ZEILE(B$55:B$59))&T(ZEILE(B1:B5)))))
Entscheidend ist hierbei die simple UDF CellColor, die allerdings nur für EinzelZellen, keine ZellBereiche ausgelegt ist. Das ist bei der uralten XLM-Fkt ZELLE.ZUORDNEN ebenfalls so, die kann aber nur direkte ZellFarben erkennen, keine bedingten. Die UDF kann auch letzteres, da sie auf einer neuen, objektbegründenden ZellEigenschaft basiert:
Rem Ermittelt gezeigte ZellFarbe (auch aus BedingtFormat, erst ab Xl14)
Function CellColor(Zelle As Range)
    CellColor = Zelle.DisplayFormat.Interior.Color
End Function
Aus Stabilitätsgründen hat MS dieses neue Objekt aber nicht für Fktt in ZellFmln zugelassen (man erhält bei normalem Einsatz stets den FWert #WERT!), weshalb die hier nur per FmlText-Auswerten eingesetzt wdn kann. Dabei fktioniert auch ein Application.Volatile nicht, weshalb sie darauf verzichtet. Eine volatile xlStandardFkt sollte aber in die Fml eingebaut wdn (hier JETZT), damit sie per [F9] oder Klick in eine beliebige Zelle nebst Abschluss neu berechnet wdn kann (normale FarbÄnderungen lösen keine Neuberechnung aus, nur aufkopierte!).
Will man dafür die ebenfalls uralte XLM-Fkt AUSWERTEN einsetzen, kann das ebenfalls nur per benannter Fml erfolgen. Da sie aber anscheinend auch nur auf Einzel-FmlTexte ausgerichtet ist, bleibt deren hier erforderliche Variation über ZellBereiche der XlSteuerung überlassen, die zur Wiedergabe aller Werte eines Anstoßes bedarf. Der besteht hier in einer sich über mindestens 2 Zellen erstreckenden MatrixFml, die ich deshalb im Ggsatz zu echten 1zelligen (singular) und mehrzelligen (plural) MatrixFmln dual (quasi-1-zellig) nenne. Sie liefern denn auch 2× das gleiche Ergebnis (den überzähligen Wert kann man ausblenden oder eine spezielle VerbundZelle - per FormatPinsel Format einer MusterVbZelle übertragen - über beide Werte bilden (im Bsp K63:L64, hier nicht als VerbundZelle dargestellt!).
Es gibt aber noch eine einfachere Möglichkeit mit einer weiteren simplen UDF, die das Auswerten besorgt. Der FmlText muss dann allerdings in US-Original-Notation angegeben wdn, was hier aber irrelevant ist (im Bsp K61:K62). Diese kann auch ZellBereiche und Datenfelder (aus Ausdrücken, was hier der Fall ist!) verarbeiten:
Rem rekursive TrivialVar zu LetEval/LetFormula
'   Vs1.0 -LSr -cd:20151026 -lupd:20151026n
Function TxEval(Bezug)
    Dim ix As Long, erg, tx
    If TypeName(Bezug) = "String" Then
        TxEval = Evaluate(Bezug)
    Else: ReDim erg(WorksheetFunction.CountA(Bezug) - 1)
        For Each tx In Bezug
            erg(ix) = TxEval(tx): ix = ix + 1
        Next tx
        TxEval = erg
    End If
End Function
Viel Erfolg! Luc :-?