manibam
Goto Top

gut, schlecht und neutral - Funktion

Hallo zusammen

Folgendes Problem, Excel 2007:

Ich markiere verschiedene Felder mit der "Zellenformatvorlage" (GUT, SCHLECHT und NEUTRAL)
Zum Schluss brauch ich dann die Summe, wieviel GUT, SCHLECHT und NEUTRAL ist. (wie in dem Screen
zu sehen)
e3e199ad49bc50eb84d1548b4fd9d7d9-unbenannt

Content-ID: 126920

Url: https://administrator.de/contentid/126920

Ausgedruckt am: 26.11.2024 um 05:11 Uhr

jhinrichs
jhinrichs 12.10.2009 um 13:28:07 Uhr
Goto Top
Hallo,
das tut mir leid. Wenn Du Dein Verhalten ("Ich markiere verschiedene Felder mit der "Zellenformatvorlage" (GUT, SCHLECHT und NEUTRAL)")
alleine nicht ändern kannst, kann Dir vielleicht ein Therapeut helfen?

Im Ernst: Was genau ist Dein Problem?
manibam
manibam 12.10.2009 um 13:36:42 Uhr
Goto Top
wie berechne ich die summe der in den grünen, roten und gelben felder forhanden zahlen.
das ist nur ein bsp. die tabelle ist natürlich etwas grösser, und ich will ned "=A1+A2+A8+A12+A78) eingaben...
H41mSh1C0R
H41mSh1C0R 12.10.2009 um 14:25:52 Uhr
Goto Top
Zitat von @manibam:
felder forhanden zahlen.

Fische Füttern Fordert Fiel Ferstand xD, sorry das musste sein

Zum Problem:

Zauberwort lautet: VBA

Nimmt den Macroassistent und zeichne das buntmachen der Zellen auf. Mit dem Parameter für das farbig machen kann man doch bestimmt auf die gleiche weise den Parameter abfragen. Wenn das klappt, nen Button fürs berechnen und in einer Schleife die Spalten durchlaufen und addieren der Werte für Farbe 1 bis n.
manibam
manibam 12.10.2009 um 14:48:40 Uhr
Goto Top
und ohne vba gehts nicht?
hab ned viel ahnung von Makros
jhinrichs
jhinrichs 12.10.2009 um 15:03:58 Uhr
Goto Top
Nö,
ohne VBA geht es afaik nicht. Alternative (und sowieso sauberer und auch für ggf. gewünschte Folgeauswertungen einfacher):
getrennte Spalten für die Kategorien, oder eine Hilfsspalte, in der man die Kategorie einträgt (1=gut, 2=schlecht etc) und die Farben über bedingte Formatierung darstellen.
Summenbildung dann über weitere Hilfsspalte mit Wenn-Konstrukt.
H41mSh1C0R
H41mSh1C0R 12.10.2009 um 15:10:19 Uhr
Goto Top
Deswegen gibts ja die Funktion Makro aufzeichnen.

Den Ablauf aufzeichnen und das Makro lesen und verstehen. Noch einfacher gehts nicht.

Noch nen Tip das was du suchst ist ".ColorIndex" .

Also von jeder Zelle den ColorIndex auswerten und lustig addieren und als Ergebnis unten ausgeben.
SamTrex
SamTrex 12.10.2009 um 16:47:06 Uhr
Goto Top
Hallo Manibam,

So sieht das aus:
Sub CheckIt()
    Dim varSPALTE, varZELLE_GUT, varZELLE_NEUTRAL, varZELLE_SCHLECHT, varZELLE_NA As String 'Deklaration  
    Dim varANZAHL, varGUT, varNEUTRAL, varSCHLECHT, varNA As Integer
    
    
    '========================================================================================================  
    'Hier kommen Deine Angaben rein!  
    
    varSPALTE = "A"             'Spalte in der die Bewertungen stehen  
    varZELLE_GUT = "G1"         'Zelle für Summe gut  
    varZELLE_NEUTRAL = "G2"     'Zelle für Summe neutral  
    varZELLE_SCHLECHT = "G3"    'Zelle für Summe schlecht  
    varZELLE_NA = "G4"          'Zelle für Summe ohne Wertung bzw. mit anderer Einstellung  
    
    '========================================================================================================  
    
    
    
    varANZAHL = Columns(varSPALTE).SpecialCells(xlCellTypeConstants).Count  'Ermittelt die letzte Zelle mit Inhalt in der angegebenen Spalte  
    varGUT = 0          'Zählerstände einstellen  
    varNEUTRAL = 0
    varSCHLECHT = 0
    varNA = 0
    
    
    For i = 1 To varANZAHL 'Schleife von Zeile 1 bis ermitteltem Ende  
        Select Case (Range(varSPALTE & i).Style)   'Abfrage auf Style der Zelle (wahrscheinlich nur Excel 2007 - keine Ahnung, aber dafür wolltest du es ja. - Die Zelle muß über die Formatvorlage eingestellt sein!!!)  
            Case "Gut"  
                If IsNumeric(Range(varSPALTE & i).Value) Then varGUT = varGUT + CInt(Range(varSPALTE & i).Value)  'Prüfung ob eine Zahl eingetragen wurde. Wenn ja dann: Alten Zellenwert + Neuen Zellenwert (dieser wird vorsichtshalber in eine Zahl (Integer) gewandelt falls du die Zelle als Text formatiert hast.  
            Case "Neutral"  
                If IsNumeric(Range(varSPALTE & i).Value) Then varNEUTRAL = varNEUTRAL + CInt(Range(varSPALTE & i).Value)
            Case "Schlecht"  
                If IsNumeric(Range(varSPALTE & i).Value) Then varSCHLECHT = varSCHLECHT + CInt(Range(varSPALTE & i).Value)
            Case Else
                If IsNumeric(Range(varSPALTE & i).Value) Then varNA = varNA + CInt(Range(varSPALTE & i).Value)
        End Select
    Next

    Range(varZELLE_GUT).Value = varGUT              'Summe der Zähler wird in die von dir angegebenen Felder geschrieben.  
    Range(varZELLE_NEUTRAL).Value = varNEUTRAL
    Range(varZELLE_SCHLECHT).Value = varSCHLECHT
    Range(varZELLE_NA).Value = varNA
    
End Sub

Einfach in Excel "ALT+F11" in den Macroeditor gehen und ein neues Modul anlegen.
Doppelklick drauf und einfügen.
Die Angaben oben deiner Tabelle anpassen und schließen.
In Excel unter Ansicht Macros (ganz rechts) auf anzeigen und dann "CheckIt" ausführen.

Tada, fertig.

Das ganze solltest du aber erstmal in einer Kopie deiner Tabelle testen, man weis ja nie!!!

MfG Sam

Wissen ist Nacht!
maretz
maretz 13.10.2009 um 07:37:15 Uhr
Goto Top
Naja - man kann schon nen bisserl tricksen, je nachdem wofür das ding sein soll...

auf Tabellenblatt 2 gehen und ne einfache Formel in A1:
WENN ($Tabelle1:C1=1;1;0)
in B1:
WENN ($Tabelle1:C1=2;1;0)
in C1:
WENN ($Tabelle1:C1=3;1;0)

Jetzt hat man auf dem zweiten Tabellenblatt die Werte in 3 Spalten aufgesplittet. Dann über jede Spalte ne Summe ziehen -> und die wieder zurück auf Tabelle1 in die richtigen Felder packen...

Ist keine schöne Lösung - aber für ne kleine Zwischendurchtabelle sollte die ausreichen.
76109
76109 13.10.2009 um 12:20:06 Uhr
Goto Top
Hallo zusammen!

Noch nen Code nach dem vorgegebenen Muster zum testenface-smile
Const RngWert = "E3"             'Zelle mit dem erstem Wert  

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim W As Range, T As Range, S As Double, EndT As Long, BegT As Long, ColW As Integer, ColT As Integer
    
    ColW = Range(RngWert).Column:  ColT = Range(RngWert).Offset(0, -1).Column
    
    If Target.Column < ColT Or Target.Column > ColW Then Exit Sub
    
    EndT = Cells(Rows.Count, ColT).End(xlUp).Row:  BegT = Cells(EndT, ColT).End(xlUp).Row
        
    For Each T In Range(Cells(BegT, ColT), Cells(EndT, ColT))
        S = 0
        For Each W In Range(Range(RngWert), Cells(BegT - 1, ColW))
            If IsNumeric(W) And W.Interior.ColorIndex = T.Interior.ColorIndex Then S = S + W
        Next
        T.Offset(0, 1) = S
    Next
End Sub
Als Variable muss nur die Zelle mit dem ersten Wert z.B "E3" angegeben werden.

Der Aufbau der Zellen muss allerdings das Format haben, wie es von manibam vorgegeben wurde. D.h. Die Spalte mit dem Farb-Text muss z.B. bei Werte in Spalte "E" in dem Fall Spalte "D" sein. Ausserdem darf unter den Zellen von Farb-Text nichts mehr stehen, wobei der Farb-Text selbst ohne Bedeutung ist. Wichtig ist nur, dass was drin steht und sie mit entsprechender Farbe formatiert sind.

Unter diesen Voraussetzungen können beliebig neue Farben für Summen hinzugefügt und für Werte neue Zeilen eingefügt werden.

Tabellen-Format z.B. für Werte ab Zelle "E3":
D E
1
2
3 Wert
n Wert
Leer
? Text =Summe
. .... =Summe

Der Code wird wie folgt in's Tabellenblatt "Name" eingefügt:
<Menu><Extras><Makro><Visual Basic Editor><TabelleX ("Name") Doppelklick><Quelltext einfügen><Symbol Speichern><VB-Editor schließen>

Das Makro funktioniert soweit automatisch, allerdings werden Farb-Formatierungen nicht als Erreignis erkannt.D.h. nach einer Farbformatierung muss eine andere x-beliebige Zelle in dem Spaltenbereich Farb-Text/Werte selektiert werden.

Gruß Dieter