tägliche berufliche Abwesenheit berechnen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Niels
*****
Beiträge: 212
Registriert: Mi, 16.06.2004 06:46
Wohnort: Heikendorf

tägliche berufliche Abwesenheit berechnen

Beitrag von Niels »

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
Wer lesen kann ist klar im Vorteil.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

die Formel ist:

Code: Alles auswählen

=ZÄHLENWENN(Tabelle1.A2:A32;">=0,5833")
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

Code: Alles auswählen

=ZÄHLENWENN(INDIREKT(VERKETTEN(A1;".A2:A32"));">=0,583")
Verwendet den Tabellennamen in A1 zum Zählen auf Blatt "Woche1"


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)
Niels
*****
Beiträge: 212
Registriert: Mi, 16.06.2004 06:46
Wohnort: Heikendorf

Beitrag von Niels »

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.:
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
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.
komma4 hat geschrieben: Wie heissen Deine Wochen-Tabellenblätter?
Sehr uncool - Datum vom Montag im Format TT_MM.

Gruß
Niels

PS: Die Zeitspalten sind nicht als Zeit formatiert, sondern als Standard.
Wer lesen kann ist klar im Vorteil.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

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

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
nun manuell die Einzelsummen in der Spalte dahinter summieren
(bei mir Spalte E, in E5):

Code: Alles auswählen

=Summe(C5+D5)
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

Code: Alles auswählen

=wenn(e5>8;1;0)
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):

Code: Alles auswählen

=TEXT(A1;"TT.MM.JJ")
3. Tag und Monat Deiner Vorgabe entsprechend aufbauen (C1):

Code: Alles auswählen

=VERKETTEN(TEIL(B1;1;2);"_";TEIL(B1;4;2))
4. Damit eine Formel aufbauen (d1):

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)
Niels
*****
Beiträge: 212
Registriert: Mi, 16.06.2004 06:46
Wohnort: Heikendorf

Beitrag von Niels »

komma4 hat geschrieben:Hilft das?
Jo, danke!
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.
Niels
*****
Beiträge: 212
Registriert: Mi, 16.06.2004 06:46
Wohnort: Heikendorf

Makro

Beitrag von Niels »

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]

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

Gruß
Niels
Wer lesen kann ist klar im Vorteil.
Antworten