Moin moin,
ich habe folgende Herausforderung an meine Statistiktabelle.
Ist-Zustand:
Über ein Userform kann der Mitarbeiter bestimmte Parameter zu den Fahrten eingeben, die im Betrieb durchgeführt werden. Hier werden u.a. Datum, Fahrtbeginn/-ende und Kilometer eingetragen.
Gleichzeitig wird deklariert um welche Art von Fahrt es sich handelt. Nennen wir sie mal Fahrt1, Fahrt2, [...] Fahrt10.
Je nachdem was für eine Fahrt es ist werden die Kilometer in eine entsprechende Spalte in der Zeile eingetragen um am Ende der Spalte diese zusammenzuzählen. Über die Funktion "=ANZAHL2" werden die Kilometerspalten gleichzeitig zur Zählung der Fahrten der jeweiligen Kategorie genutzt.
Eingetragen werden diese Kilometer in den Spalten B bis K bei der jeweiligen Kategorie. Das bedeutet pro Zeile ist in den Spalten B bis K (od. 2 bis 11) jeweils nur eine mit einem Wert gefüllt. Die übrigen bleiben leer.
Spalte M und N beinhalten Fahrtbeginn bzw. -ende
Spalte L enthält die Formel "=(N-M)*1440" um die Gesamtfahrzeit in Minuten auszugeben.
Am Ende der Eingabe über das Userform wird nach dem Eintragen dann die Tabelle nochmal nach Datum und Fahrtbeginn sortiert.
Soll-Zustand:
Die Spalten A bis R sind der zu druckende Bereich. Innerhalb der Aufführung der Spalten soll sich nichts ändern.
Jedes WorkSheet ist eine Monatsaufstellung und am Ende des Monats soll ich die durchschnittliche Zeit pro Fahrt für die Jahresstatistik errechnen lassen. Jetzt habe ich aber das Problem, dass ich diese Fahrtzeiten differenzieren soll. Sprich ich brauche die Durchschnittszeit aller Fahrten in den einzelnen Kategorien, welche sich am Besten direkt mit der Eingabe berechnet.
Mein bisheriger Lösungsansatz:
Ich hatte mir überlegt, dass ich die Spalten außerhalb des Druckbereichs nutzen könnte und eine weitere (ich nenne sie jetzt einfach einmal) Ghosttabelle erstelle in der dann die Spalten aufgeführt sind wie bei Spalte B bis K und dort dann die Minuten eingetragen werden. Am Ende der jeweiligen Spalte kann ich dann die Minuten wieder zusammenzählen und mit den Anzahlswerten der ersten Tabelle dann die Durchschnittszeit pro Kategorie berechnen.
Wie man bestimmt an meinen unten aufgeführten Codezeilen sieht arbeite ich mit "If then". Mir wurde gesagt ich könne das Ganze auch mit Schleifen regeln, jedoch muss ich mir dafür erst einmal die Kenntnisse über Schleifen aneignen und das, was die Statistik bis jetzt machen sollte, lief bis mit "If" 100%ig gut.
Ich dachte ich könnte beim Eintragen der Kilometer in die dementsprechende Spalte nach dem "then"-Befehl einfach ein "and" hinten dran hängen und ihm sagen er solle den Zahlenwert, den die Formel in Spalte L ausspuckt einfach in die dementsprechende Spalte meiner "Ghosttabelle" (Spalte X bis AG od. 24 bis 33) kopieren, die ich ein paar Spalten weiter parallel zur eigentlichen Tabelle gezogen habe. Jedoch musste ich dann feststellen, dass das so nicht funktioniert und er mir dann Fehler beim kompilieren ausspuckt.
Vielleicht liege ich mit meinem Lösungsansatz auch total falsch und einer hat eine Idee wie ich das einfacher und/oder besser hinbekommen kann. Bin für jeden Tipp dankbar. =)
Der aktuelle Code:
Wie oben bereits beschrieben arbeite ich mit "If then", da ich von Schleifen und deren sinnvollen Einsatz noch nicht wirklich eine Ahnung habe.
Kurze Erläuterung zu den einzelnen Elementen (auch, wenn man es sich wahrscheinlich denken kann):
"Eingabe" ist der Name des Userforms zur Eingabe der Daten in die Statistik
"TextDatum" ist der Eintrag aus dem Textfeld "Datum"
"TextStart" ist die Eingabe aus dem Textfeld "Fahrtbeginn"
"TextEnde" ist dementsprechend die Eingabe des Users aus dem Textfeld "Fahrtende"
"TextKilometer" ist die gefahrene Kilometerzahl die in die dementsprechende Spalte der Kategorie kommt
"OptionButton???" sind die Ooptionbuttons, die die Kategorie der Fahrt bestimmen. Ebenso ist die Kategorie der Fahrt von der Anzahl der Kilometer abhängig wobei hier die "41" die magische Zahl ist ab der sich die Kategorie ändert.
Private Sub ButtonInsert_Click()
'Leere Zeile suchen und eintragen
Dim last As Integer
last = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
ActiveSheet.Cells(last, 1).Value = Eingabe.TextDatum.Value
ActiveSheet.Cells(last, 13).Value = Eingabe.TextStart.Value
ActiveSheet.Cells(last, 14).Value = Eingabe.TextEnde.Value
'Spaltenzuweisungen
'Fahrt der Kategorie 1 (Spalte 2)
If Eingabe.TextKilometer.Value < 41 _
And Eingabe.OptionButton1-1.Value = True _
And Eingabe.OptionButton2-2.Value = False _
And Eingabe.OptionButton2-3.Value = False _
Then ActiveSheet.Cells(last, 2).Value = Eingabe.TextKilometer.Value
'Fahrt der Kategorie 2 (Spalte 3)
If Eingabe.TextKilometer.Value > 40 _
And Eingabe.OptionButton1-1.Value = True _
And Eingabe.OptionButton2-2.Value = False _
And Eingabe.OptionButton2-3.Value = False _
Then ActiveSheet.Cells(last, 3).Value = Eingabe.TextKilometer.Value
If Eingabe.TextKilometer.Value > 40 _
And Eingabe.OptionButton1-1.Value = True _
And Eingabe.OptionButton2-2.Value = False _
And Eingabe.OptionButton2-3.Value = False _
Then ActiveSheet.Cells(last, 3).Value = Eingabe.TextKilometer.Value
(usw.)
'Einträge sortieren
Range(Cells(2, 1), Cells(185, 18)).Sort Key1:=Cells(2, 1), Order1:=xlAscending, _
Key2:=Cells(2, 13), Order2:=xlAscending, Orientation:=xlTopToBottom
'Zur Hauptmenü zurück
Worksheets("Hauptmenü").Activate
'Eingabemaske schließen
Unload Eingabe
End Sub
|