tägliche berufliche Abwesenheit berechnen
Moderator: Moderatoren
tägliche berufliche Abwesenheit berechnen
Hallo zusammen,
Ich protokolliere meine Arbeitstätigkeit im Calc. Für jede Woche gibt es ein Arbeitsblatt mit den Spalten Datum, Kunde, Stunden und Überstunden. Natürlich können pro Tag auch mehrere Einträge vorkommen. Nun brauche ich für die Steuer eine Aufstellung wie viele Tage im Jahr ich mindestens 8, mindestens 14 und 24 Stunden abwesend war. Also Stunden + Überstunden wenn nicht Urlaub unter Kunde steht.
Hat da jemand eine Idee für mich? SUMMEWENN über alle Blätter - geht das?
Danke
Niels
Ich protokolliere meine Arbeitstätigkeit im Calc. Für jede Woche gibt es ein Arbeitsblatt mit den Spalten Datum, Kunde, Stunden und Überstunden. Natürlich können pro Tag auch mehrere Einträge vorkommen. Nun brauche ich für die Steuer eine Aufstellung wie viele Tage im Jahr ich mindestens 8, mindestens 14 und 24 Stunden abwesend war. Also Stunden + Überstunden wenn nicht Urlaub unter Kunde steht.
Hat da jemand eine Idee für mich? SUMMEWENN über alle Blätter - geht das?
Danke
Niels
Wer lesen kann ist klar im Vorteil.
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
die Formel ist:
zählt die Einträge in der A-Spalte, bei denen der Einsatz mind. 14 Std. war.
Andere Werte bekommst Du heraus, wenn Du die Zeit-formatierten Zellen mal umformatierst.
Wie heissen Deine Wochen-Tabellenblätter?
A-SPALTE
Woche1
Woche2
....
B-SPALTE
Verwendet den Tabellennamen in A1 zum Zählen auf Blatt "Woche1"
Hilft das weiter?
Code: Alles auswählen
=ZÄHLENWENN(Tabelle1.A2:A32;">=0,5833")
Andere Werte bekommst Du heraus, wenn Du die Zeit-formatierten Zellen mal umformatierst.
Wie heissen Deine Wochen-Tabellenblätter?
A-SPALTE
Woche1
Woche2
....
B-SPALTE
Code: Alles auswählen
=ZÄHLENWENN(INDIREKT(VERKETTEN(A1;".A2:A32"));">=0,583")
Hilft das weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Vielen Dank,
Ich fürchte, ich habe mich mal wieder nicht ganz korrekt ausgedrückt. Ich habe keine Tagessumme, sondern viele Einzeleinsätze. Da steht z.B.:
Gruß
Niels
PS: Die Zeitspalten sind nicht als Zeit formatiert, sondern als Standard.
Ich fürchte, ich habe mich mal wieder nicht ganz korrekt ausgedrückt. Ich habe keine Tagessumme, sondern viele Einzeleinsätze. Da steht z.B.:
Dabei ist die 1. Stundenspalte die Normalstunden und die 2. die Überstunden. Aus all diesen Werten muss nun die Tagessumme 10,5 gebildet werden um die Entscheidung zu treffen.07.11.2005____Kunde A____4,0___2,0
07.11.2005____Kunde B____3,0___0,0
07.11.2005____Kunde C____0,5___0,0
07.11.2005____Kunde D____0,5___0,5
Sehr uncool - Datum vom Montag im Format TT_MM.komma4 hat geschrieben: Wie heissen Deine Wochen-Tabellenblätter?
Gruß
Niels
PS: Die Zeitspalten sind nicht als Zeit formatiert, sondern als Standard.
Wer lesen kann ist klar im Vorteil.
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
für eine automatisierte Auswertung ein wirklich unglücklicher Aufbau der Daten...
Am Schnellsten komme ich hier so zu einem Ergebnis:
auf dem Tabellenblatt einer Woche (Name: 11_07, für die KW28/2005 ?) die Funktion
aufrufen.
Gruppieren nach <SPALTE TAG>, Teilergebnisse berechnen für... <SPALTE normaleStd> und <SPALTE ÜberStd>
Das bringt Dir schonmal (Zeilen mit) Summen per Tag.
nun manuell die Einzelsummen in der Spalte dahinter summieren
(bei mir Spalte E, in E5):
und für jeden Tag wiederholen.
In den Spalten F, G usw. kannst Du nun zählen, welche Tage mehr als 8, 14 oder sonstige Std. haben
Auf einem Jahressummenblatt die Anzahl der Tage >8h, >14h holen:
1. Schritt: ermitteln der Blattnamen, Spalte A, A1 füllen mit dem 11.07.2005, A2: 18.07.2005, beide Zellen markieren und von der rechten unteren Ecke nach unten ziehen, bis Jahresende erreicht.
Ergibt eine Reihe von Montagen: 11.07.2005, 18.07.2005, 25.07.2005, 01.08.2005, usw.
2. zum Zusammensetzen den nummerischen Wert (als Datum formatiert angezeigt) als Text anzeigen lassen (in B1):
3. Tag und Monat Deiner Vorgabe entsprechend aufbauen (C1):
4. Damit eine Formel aufbauen (d1):
Hilft das?
Am Schnellsten komme ich hier so zu einem Ergebnis:
auf dem Tabellenblatt einer Woche (Name: 11_07, für die KW28/2005 ?) die Funktion
Code: Alles auswählen
Daten>Teilergebnisse...
aufrufen.
Gruppieren nach <SPALTE TAG>, Teilergebnisse berechnen für... <SPALTE normaleStd> und <SPALTE ÜberStd>
Das bringt Dir schonmal (Zeilen mit) Summen per Tag.
Code: Alles auswählen
11.07.05 Ergebnis 8 2,5
(bei mir Spalte E, in E5):
Code: Alles auswählen
=Summe(C5+D5)
In den Spalten F, G usw. kannst Du nun zählen, welche Tage mehr als 8, 14 oder sonstige Std. haben
Code: Alles auswählen
=wenn(e5>8;1;0)
1. Schritt: ermitteln der Blattnamen, Spalte A, A1 füllen mit dem 11.07.2005, A2: 18.07.2005, beide Zellen markieren und von der rechten unteren Ecke nach unten ziehen, bis Jahresende erreicht.
Ergibt eine Reihe von Montagen: 11.07.2005, 18.07.2005, 25.07.2005, 01.08.2005, usw.
2. zum Zusammensetzen den nummerischen Wert (als Datum formatiert angezeigt) als Text anzeigen lassen (in B1):
Code: Alles auswählen
=TEXT(A1;"TT.MM.JJ")
Code: Alles auswählen
=VERKETTEN(TEIL(B1;1;2);"_";TEIL(B1;4;2))
Code: Alles auswählen
=ZÄHLENWENN(INDIREKT(VERKETTEN(C1;".F1:F9999"));">0")
Hilft das?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Jo, danke!komma4 hat geschrieben:Hilft das?
Ich muss das mal in Ruhe durcharbeiten. Ich war auch scon auf dem Trip mit Hilfstabellen. Vielleicht kann ich die Daten per Makro in eine Tabelle zusammensammeln. Dann kann ich eine weitere Tabelle schaffen, in der jeder Tag genau einmal auftaucht. Nun würde SUMMEWENN helfen.
Ich melde mich noch einmal, sobald ich weiter bin.
Gruß
Niels
Wer lesen kann ist klar im Vorteil.
Makro
So, jetzt habe ich Dank der Hilfe dieses Forums ein Makro verfasst, welches alle Tabellen zu einer zusammenfasst. Dabei wird geprüft, ob die Tabelle ein Wchenbericht ist. Dies wird daran erkannt, dass in der Zelle A8 der Wert 'BELEG-NR.' steht. Dann werden die relevanten Spalten (B bis E) in das Blatt Jahreszusammenfassung übertragen, wobei das Übertragen von leeren Zeilen verhindert wird, indem geprüft wird, ob die Spalte B (Datum) einen Wert enthält:
[Edit]Ganz so einfach war es doch nicht, denn ich muss mich pro Zelle entscheiden, ob ich Cell.Value oder Cell.String übertragen will. Daher habe ich das Makro nochmals geändert, da ich nur Spalte C als String übertragen muss. Allerdings müssen die Zielzellen vorher richtig formatiert sein. Alternativ wäre es sicher möglich, das Format mit zu übertragen, aber dazu ist es mir jetzt schon zu spät.[/Edit]
Gruß
Niels
[Edit]Ganz so einfach war es doch nicht, denn ich muss mich pro Zelle entscheiden, ob ich Cell.Value oder Cell.String übertragen will. Daher habe ich das Makro nochmals geändert, da ich nur Spalte C als String übertragen muss. Allerdings müssen die Zielzellen vorher richtig formatiert sein. Alternativ wäre es sicher möglich, das Format mit zu übertragen, aber dazu ist es mir jetzt schon zu spät.[/Edit]
Code: Alles auswählen
sub Jahreszusammenfassung
Dim Doc As Object
Dim SheetQ As Object
Dim CellQ As Object
Dim SheetZ As Object
Dim CellZ As Object
Dim Quelle As Integer
Dim ZeileQ As Integer
Dim ZeileZ As Integer
Dim Spalte As Integer
Doc = StarDesktop.CurrentComponent
Quelle = 0
ZeileZ = 1
SheetZ = Doc.Sheets.getByName("Jahreszusammenfassung")
msgbox ThisComponent.Sheets.Count
do
SheetQ = Doc.Sheets (Quelle)
CellQ = SheetQ.getCellByPosition(0, 7)
if CellQ.String = "BELEG-NR." then
ZeileQ = 8
do
CellQ = SheetQ.getCellByPosition(1, ZeileQ)
if CellQ.String <> "" then
Spalte = 1
do
CellQ = SheetQ.getCellByPosition(Spalte, ZeileQ)
CellZ = SheetZ.getCellByPosition(Spalte - 1, ZeileZ)
if Spalte =2 then
CellZ.String = CellQ.String
else
CellZ.Value = CellQ.Value
end if
Spalte = Spalte + 1
loop until Spalte > 4
ZeileZ = ZeileZ + 1
end if
ZeileQ = ZeileQ + 1
loop until ZeileQ > 34
end if
Quelle = Quelle + 1
loop until Quelle > ThisComponent.Sheets.Count - 1
end sub
Niels
Wer lesen kann ist klar im Vorteil.