Hallo Till,
wollte die Leute nicht direkt mit meinem schlechten Code erschlagen. Ich hab bisher das meiste in VBA lösen können,
aber meine Wege dorthin sind, glaube ich, oft sehr umständlich.
Es geht um die Auswertung eines Maßnahmenplans. Zwar existieren in paar Hilfszellen, aber Formeln, wann etwa ein
Smiley auf rot springt gibt es nicht. Dies wird mit einem Makro beim Start der Datei geprüft. Genauso wird eine neue
formatierte Leerzeile angehängt, wenn man in die letzte Zeile bei "Was?" etwas einträgt.
Kann ich hier keinen ScreenShot posten? Hab leider keinen Webspace. Egal, hab den Code kommentiert.
Die Auswertung wird beim Klick auf einen Button ausgelöst (zumindest vorerst):
Private Sub cmdStatistik_Click()
'Variablendeklaration
Dim Benutzer As String
Dim Benutzernummer As Integer
'Screenupdate
Application.ScreenUpdating = False
'Statistiken der einzelnen Benutzer zusammentragen
Sheets("Benutzer").Select
Sheets("Benutzer").Range("A2").Select
Do While Not IsEmpty(ActiveCell)
Benutzer = ActiveCell
Benutzernummer = Benutzernummer + 1
Sheets("Maßnahmenplan").Select
'falls Daten gefiltert sind, Filter zurücksetzen
Selection.AutoFilter Field:=1 'laufende Nummer der Maßnahme
Selection.AutoFilter Field:=2 'interne(I) oder externe(E) Maßnahme
Selection.AutoFilter Field:=3 'eingetragen durch (Benutzer)
Selection.AutoFilter Field:=4 'eingetragen am (Datum)
Selection.AutoFilter Field:=5 'Titel/Thema der Maßnahme
Selection.AutoFilter Field:=6 'Bemerkungen/Details
Selection.AutoFilter Field:=7 'Methode (Wie wird Maßnahme angegangen?)
Selection.AutoFilter Field:=8 'Umsetzung durch wen? (Benutzer)
Selection.AutoFilter Field:=9 'Umsetung bis wann? (Datum)
Selection.AutoFilter Field:=10 'Umsetzung erledigt am (Datum)
Selection.AutoFilter Field:=11 'Zeit (S: zu schnell, JIT: just in time, L: zu langsam erledigt)
Selection.AutoFilter Field:=12 'Drop-Down "Offen" oder "Erledigt"
Selection.AutoFilter Field:=13 'Smiley rot:Maßnahme offen und überfällig, gelb: offen und im Zeitplan, grün: erledigt
'Schriftart für Smileys ist Wingdings (J für lachend, K für neutral, L für weinend)
Selection.AutoFilter Field:=14 'freies Feld um bei Besprechungen bestimmte Maßnahmen zu filtern
'wie viele offene Maßnahmen hat der Benutzer (Umsetzer)?
Selection.AutoFilter Field:=8, Criteria1:=Benutzer
Selection.AutoFilter Field:=13, Criteria1:="=K", Operator:=xlOr, _
Criteria2:="=L"
Sheets("Benutzer").Range("B" & Benutzernummer + 1) = Sheets("Maßnahmenplan").Range("O3")
Selection.AutoFilter Field:=8 'zurücksetzen
Selection.AutoFilter Field:=13
'wie viele erledigte Maßnahmen hat der Benutzer (Umsetzer)?
Selection.AutoFilter Field:=8, Criteria1:=Benutzer
Selection.AutoFilter Field:=13, Criteria1:="=J"
Sheets("Benutzer").Range("C" & Benutzernummer + 1) = Sheets("Maßnahmenplan").Range("O3")
'Summe der offenen und erledigten Maßnahmen
Sheets("Benutzer").Range("D" & Benutzernummer + 1) = Sheets("Benutzer").Range("B" & Benutzernummer + 1) + _
Sheets("Benutzer").Range("C" & Benutzernummer + 1)
'Abarbeitungsgrad (Verhältnis offene zu Gesamtanzahl)
If Sheets("Benutzer").Range("D" & Benutzernummer + 1) = 0 Then
Sheets("Benutzer").Range("E" & Benutzernummer + 1) = 0
Else
Sheets("Benutzer").Range("E" & Benutzernummer + 1) = (Sheets("Benutzer").Range("C" & Benutzernummer + 1) / _
Sheets("Benutzer").Range("D" & Benutzernummer + 1)) * 100
End If
Selection.AutoFilter Field:=8
Selection.AutoFilter Field:=13
'Maßnahmen, bei denen ein Datum (eingetragen, bis wann, erledigt) fehlt, werden nicht in der Statistik
'zur Bearbeitungsdauer berücksichtigt
Selection.AutoFilter Field:=4, Criteria1:="<>"
Selection.AutoFilter Field:=9, Criteria1:="<>"
Selection.AutoFilter Field:=10, Criteria1:="<>"
Selection.AutoFilter Field:=8, Criteria1:=Benutzer
'Berechnung von SOLL-Bearbeitungszeit, IST-Bearbeitungszeit und der Differenz
Sheets("Benutzer").Range("F" & Benutzernummer + 1) = Sheets("Maßnahmenplan").Range("P2") 'wird in Hilfszelle berechnet
Sheets("Benutzer").Range("G" & Benutzernummer + 1) = Sheets("Maßnahmenplan").Range("Q2") 'wird in Hilfszelle berechnet
Sheets("Benutzer").Range("H" & Benutzernummer + 1) = Sheets("Maßnahmenplan").Range("R2") 'wird in Hilfszelle berechnet
'Mittelwerte von SOLL und IST
If Sheets("Maßnahmenplan").Range("O3") = 0 Then
Sheets("Benutzer").Range("I" & Benutzernummer + 1) = 0
Else
Sheets("Benutzer").Range("I" & Benutzernummer + 1) = Sheets("Maßnahmenplan").Range("P2") / _
Sheets("Maßnahmenplan").Range("O3")
End If
If Sheets("Maßnahmenplan").Range("O3") = 0 Then
Sheets("Benutzer").Range("J" & Benutzernummer + 1) = 0
Else
Sheets("Benutzer").Range("J" & Benutzernummer + 1) = Sheets("Maßnahmenplan").Range("Q2") / _
Sheets("Maßnahmenplan").Range("O3")
End If
Selection.AutoFilter Field:=4
Selection.AutoFilter Field:=9
Selection.AutoFilter Field:=10
Selection.AutoFilter Field:=8
'Anzahl der Maßnahmen "zu schnell"
Selection.AutoFilter Field:=8, Criteria1:=Benutzer
Selection.AutoFilter Field:=11, Criteria1:="S"
Sheets("Benutzer").Range("K" & Benutzernummer + 1) = Sheets("Maßnahmenplan").Range("O3")
Selection.AutoFilter Field:=8
Selection.AutoFilter Field:=11
'Anzahl der Maßnahmen "just in time"
Selection.AutoFilter Field:=8, Criteria1:=Benutzer
Selection.AutoFilter Field:=11, Criteria1:="JIT"
Sheets("Benutzer").Range("L" & Benutzernummer + 1) = Sheets("Maßnahmenplan").Range("O3")
Selection.AutoFilter Field:=8
Selection.AutoFilter Field:=11
'Anzahl der Maßnahmen "zu langsam"
Selection.AutoFilter Field:=8, Criteria1:=Benutzer
Selection.AutoFilter Field:=11, Criteria1:="L"
Sheets("Benutzer").Range("M" & Benutzernummer + 1) = Sheets("Maßnahmenplan").Range("O3")
Selection.AutoFilter Field:=8
Selection.AutoFilter Field:=11
Sheets("Benutzer").Select
ActiveCell.Offset(1, 0).Select
Loop
End Sub
|