PDA

Vollständige Version anzeigen : Abweichungen farblich markieren


CKK
21.07.2014, 09:40
Hallo zusammen,

ich habe folgendes Problem:

In meinem Arbeitsblatt sind in den Zeilen einzelne Personen aufgeführt, in den Spalten jeweils die Telefonkosten der Mitarbeiter pro Monat (also Jan..., Feb,....) sowie der kumulierte Durchschnitt der monatlichen Telefonkosten des einzelnen Mitarbeiters. Hinter den Kosten des Mitarbeiters A für Januar ist also in der nächsten Spalte der Durchschnittswert für Mitarbeiter A für Januar aufgeführt (sind dann natürlich identisch). Nach den Telefonkosten für Februar kommt dann eine Spalte mit den durchschnittlichen Kosten für Jan & Feb...usw.

Ich würde gerne die konkreten Telefonkosten eines Mitarbeiters farblich hervorheben, falls sie vom aktuellen Durchschnitt um 50% abweichen.

Wie kann ich das per VBA lösen?

Vielen vielen Dank!!

MWOnline
21.07.2014, 09:48
Hallöchen!

Muss es eine VBA Lösung sein? Du könntest es via bedingte Formatierung machen...

Für eine VBA Lösung müsste man die genauen Bezüge und Farbwünsche wissen ;)

Beste Grüße
Marc

CKK
21.07.2014, 10:04
Hallo Marc,

ja es müsste ein VBA-Skript sein, da es sich um einen Bericht handelt, den ich gerne jeden Monat erstellen würde. Da sich ja für jeden Mitarbeiter ein spezifischer Durchschnittswert ergibt, ist eine Lösung mit bedingter Formatierung schwierig- oder sehe ich das falsch?

Kannst Du mir weiter helfen?

Vielen Dank!
Christoph

xlph
21.07.2014, 10:28
Hallo CKK,

mal angenommen deine Tabelle sieht so aus:

Jan MW kum Feb MW kum Mrz MW kum
MA 1 24 24 13 18,5 36 24,33333333
MA 2 18 18 26 22 12 18,66666667
MA 3 22 22 24 23 34 26,66666667

Dann könnte folgender Code helfen:

Option Explicit

Public Sub DurchschnittBeiGroesserXKennzeichnen_xlph()

Dim Spalte As Integer
Dim Zeile As Long

Dim MonatsSpalten As Range

Const Abweichung As Double = 0.5


With Tabelle1 ' ggf. Anpassen *****

For Spalte = 2 To 24 Step 2
If MonatsSpalten Is Nothing Then
Set MonatsSpalten = .Columns(Spalte)
Else
Set MonatsSpalten = Union(MonatsSpalten, .Columns(Spalte))
End If
Next

For Zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
For Spalte = 2 To 24 Step 2
If .Cells(Zeile, Spalte).Value >= WorksheetFunction.Average(Intersect(.Rows(Zeile), MonatsSpalten)) * (1 + Abweichung) Then
.Cells(Zeile, Spalte).Interior.ColorIndex = 4
Else
.Cells(Zeile, Spalte).Interior.ColorIndex = xlColorIndexNone
End If
Next
Next

End With

Set MonatsSpalten = Nothing

End Sub

EDIT: Danke Mc Santa für den Hinweis.

Mc Santa
21.07.2014, 10:36
Hallo,

für alle, die hier mitlesen:

mal angenommen deine Tabelle sieht so aus:

Jan MW kum Feb MW kum Mrz MW kum
MA 1 24 24 13 18,5 36 24,33333333
MA 2 18 18 26 22 12 18,66666667
MA 3 22 22 24 23 34 26,66666667

CKK
21.07.2014, 11:19
Hallo!


Vielen leiben Dank für den Code.
Ein Problem habe ich allerdings noch: ich hab mir eine Tabelle wie in Deinem Beispiel beschrieben angelegt und den Code im Editor der entsprechenden Tabelle hinzugefügt. Leider tut sich dann nichts, wenn ich das Makro ausführe- woran könnte das liegen?

Vielen Dank!!
Christoph

xlph
21.07.2014, 11:25
Hallo.

Jan MW kum Feb MW kum Mrz MW kum
MA 1 24 24 13 18,5 36 24,33333333
MA 2 18 18 26 22 12 18,66666667
MA 3 22 22 24 23 34 26,66666667

Ändere markierten Wert in 50.

CKK
21.07.2014, 11:54
Hallo!

Super vielen Dank! Jetzt hat es geklappt!!!

Eine Frage nur noch:
In der Zeile:

If .Cells(Zeile, Spalte).Value >= WorksheetFunction.Average(Intersect(.Rows(Zeile), MonatsSpalten))

wird ja der Durchschnittswert noch einmal berechnet. Kann man da nicht auch einfach auf den schon vorhandenen Durchschnittswert in der entsprechenden Zelle zugreifen? Wie müsste dann die Codezeile lauten?


Danke!!

xlph
21.07.2014, 12:11
Hallo.

Dazu müsste erstmal die Spalte (Monat) ermittelt werden in der Werte
eingetragen sind um den entsprechenden MW-Kum zu ermitteln, der wiederum zu
Vergleich herangezogen wird. Oder den ersten MW-Kum von rechts ermitteln.

CKK
21.07.2014, 12:52
Ok und wie baue ich das dann ins Coding ein?