Προς το περιεχόμενο

Excel ωράρια. Κανένας έμπειρος;


agent_smith

Προτεινόμενες αναρτήσεις

Δημοσ.

Εμ δεν κατάλαβα τι ακριβώς εννοείς.

Του υπολογίζει στην μια στήλη όλες τις ώρες εργασίας και μετά σε άλλη τις νυχτερινές ώρες μετά τις 22:00.

 

Αν θέλει να βγάλει τις υπερωρίες του οκτάωρου (πέρα από τις νυχτερινές) τότε απλά θα κάνει μια αφαίρεση ;)

 

Το νυχτερινό ωράριο είναι 8ωρο (αρχίζει στις 22:00 και τελειώνει στις 06:00) οπότε αν σχολάσει στις 07:00 ο τύπος σου θα του βγάλει 9 και όχι 8.

Στο δικό του αρχείο αν βάλει =IF(IF(C3<B3;("24:00"-TIME(22;0;0)+C3)*24;IF(C3<TIME(22;0;0);"0";(C3-TIME(22;0;0))*24))<=8;IF(C3<B3;("24:00"-TIME(22;0;0)+C3)*24;IF(C3<TIME(22;0;0);"0";(C3-TIME(22;0;0))*24));8) σε οποιοδήποτε κελί της σειράς 3 νομίζω θα είναι εντάξει.

 

Edit: (Εννοώ το αρχείο που φαίνεται στην εικόνα του αρχικού post)

Δημοσ.

Θέλω έναν τύπο να υπολογίζει πόσες ώρες έχουν περάσει μετά την 22:00. Μέχρι τώρα έχουμε βρει κάποιες λύσεις αλά αν το ωράριο πχ είναι 15:00 μέχρι 18:00 ο τύπος =IF(ISBLANK(C3);""; MOD(C3-0,916666666666667;1)) δίνει αποτέλεσμα. Ο παραπάνω που έδωσε το παιδί φαίνεται να δουλεύει μια χαρά απλά πρέπει να βάζω ώρα εξόδου αν είναι πχ 01:00 25:00 για να το υπολογίσει.

 

Εχμ, αυτό που έγραψα, το έλεγξα ΚΑΙ για ώρα εισόδου π.χ. 17:00 και ώρα εξόδου 01:30 και μου δούλευε σωστά == 5 ώρες + 3,5 ώρες.Δεν χρειαζεται να βάλεις ωρα 25:00, που προφανώς δεν είναι σωστό.

Τώρα μόλις το ξαναέλεγξα μπας και έκανα κανένα λάθος στο copy/paste και ακόμα λειτουργεί σωστά.

 

Αυτό με το 06:00 δεν το ήξερα και προφανώς δεν το έχω λαβει υπόψη μου.

Σε συνέχεια του "06:00", επίσης δεν έχω λάβει υπόψη μου την περίπτωση έναρξη 22:00 και λήξη 07:00.

Δημοσ.

Βασικα θα βοηθουσε πολυ αν ενσωματωνες την ημερομηνια στις ωρες εξοδου και εισοδου καπως ετσι:

ΩΡΑ ΕΙΣΟΔΟΥ ΩΡΑ ΕΞΟΔΟΥ

5/05/05 15:00 16/05/05 07:00

Δημοσ.

Με τις #$*(#)ιες μέσα στο cell δεν έβγαινε άκρη οπότε...

Το παρακάτω, μόνο τούμπες δεν κάνει. :)

Δείχνει πόσο χρόνο εργάστηκε ο ταλαίπωρος και πόσος από αυτόν τον χρόνο ήταν μεταξύ "22:00" και "06:00" σε όλα τα απίθανα σενάρια π.χ. Είσοδος: 23:00 (σήμερα) και έξοδος 22:00 (αύριο)

Δουλεύει με το που θα πατήσεις "ENTER" σε οποιοδήποτε από τα δύο κελιά = Είσοδος/Έξοδος (B3,C3)

Οι guru του optimization μπορούν να το διορθώσουν όσο θέλουν :P

Πιθανότατα να θέλει λίγο πείραγμα στα <,>,<=,>= των ορίων, αλλά αυτό διορθώνεται κατά βούληση.

 

>Private Sub Worksheet_Change(ByVal Target As Range)
Dim Win As Date
Dim Wout As Date
Dim nWork As Double
Dim nTime As Double
Dim nOverTime As Double

If Target.Address = "$C$3" Or Target.Address = "$B$3" Then
  Win = fyllo1.Cells.Range("B3")
  Wout = fyllo1.Cells.Range("C3")
     
  ' bres poses wres doylepse
  If Win < Wout Then nWork = DateDiff("n", Win, Wout) / 60
  If Win > Wout Then nWork = 24 - DateDiff("n", Wout, Win) / 60
  
  ' xwrise tes se kanonikes kai nyxterines
  If Win >= "06:00" And Win < "22:00" Then
     nTime = DateDiff("n", Win, "22:00") / 60
     nOverTime = nWork - nTime
     If nOverTime > 8 Then
        nOverTime = 8
        nTime = nWork - nOverTime
     End If
  End If
  If Win >= "22:00" And Win <= "23:59" Or _
     Win >= "00:00" And Win < "06:00" Then

     nOverTime = (DateDiff("n", Win, "06:00") / 60)
     If nOverTime < 0 Then nOverTime = nOverTime + 24

     If nOverTime > nWork Then
        nOverTime = nWork
     Else
        nTime = nWork - nOverTime
        If nTime > 16 Then
           nTime = 16
           nOverTime = nWork - nTime
        End If
     End If
  End If
  fyllo1.Cells.Range("D3") = nWork
  fyllo1.Cells.Range("E3") = nTime
  fyllo1.Cells.Range("F3") = nOverTime
End If
End Sub

Δημοσ.

Με τις #$*(#)ιες μέσα στο cell δεν έβγαινε άκρη οπότε..

Το παρακάτω, μόνο τούμπες δεν κάνει. :)

 

Ξέχασες όμως να πεις στον agent_smith τι θα κάνει τον κώδικα !!!

Ο άνθρωπος δε γνωρίζει να κάνει ούτε μια στοιχειώδη συνάρτηση σε κελί.

Δημοσ.

Ξέχασες όμως να πεις στον agent_smith τι θα κάνει τον κώδικα !!!

Ο άνθρωπος δε γνωρίζει να κάνει ούτε μια στοιχειώδη συνάρτηση σε κελί.

@agent_smith

Φίλε agent_smith, άν έχεις σχετικά φρέσκο Excel...

Ανοίγεις το επίμαχο XLS αρχείο.

Πατάς την "στρογγυλή Μαλ...Beep" πάνω αριστερά και επιλέγεις "Επιλογές του Excel"

Στο πρώτο Tab = "Δημοφιλείς" επιλέγεις το checkbox με όνομα "Εμφάνιση καρτέλας 'Προγραματιστής' στην κορδέλα" και πατάς OK.

Στην "κορδέλα", πλέον, δεξιά-δεξιά εμφανίζεται η καρτέλα "Προγραμματιστής", την επιλέγεις.

Στην καρτέλα αυτή πατάς το "Visual Basic".

Στο νέο παράθυρο που θα ανοίξει, κάπου πάνω και αριστερά αναφέρει τα "Φύλλα/Sheets" του τρέχοντος XLS, π.χ. "Φύλλο1(Φύλλο1)", "Φύλλο2(Φύλλο2)", "Φύλλο3(Φύλλο3)" (ή Sheet1, Sheet2, Sheet3)

Επιλέγεις με διπλό αριστερό click του ποντικιού το "Φύλλο/Sheet" που σε ενδιαφέρει.

Δεξιά, στο ... κενό χώρο ... κάνεις paste τον κώδικά που έστειλα.

Τέλος, κάπου αριστερά και κάτω υπάρχει στο παράθυρο "Microsoft Visual Basic - Βιβλιο1 (Code)" (ή όπως λέγεται το δικό σου XLS) έχει κάποια Properties του "Φύλλου/Sheet" που έχεις επιλέξει.

Για να δουλέψει ο κώδικας όπως είναι πρέπει να αλλάξεις το Property: (Name) και από "Φύλλο1" ή "Sheet1" ή όπως αλλιώς το γράφει εκεί, πρέπει να το μετονομάσεις σε "fyllo1", όπως δηλαδή το περιμένει ο κώδικας.

 

Προσοχή.

1) Όταν σώσεις πλέον το αρχείο, πρέπει να το σώσεις σε μορφή "Βιβλίο εργασίας του Excel με δυνατότητα μακροεντολών (*.xlsm)" ώστε να αποθηκευτεί και ο κώδικας μαζί του.

2) Κάθε φορά που ανοίγεις αυτό το xlsm, το Excel είτε θα διαμαρτύρεται για τις μακροεντολές και θα πρέπει να επιλέγεις "ναι άστες να τρέξουν" είτε δεν θα τις επιτρέπει καθολου άν το έχεις πειράξει και δεν θα δουλεύει.

Για να προσπεράσεις το πρόβλημα του (2)...

Πατάς την "στρογγυλή Μαλ...Beep" πάνω αριστερά και επιλέγεις "Επιλογές του Excel"

Επιλέγεις "Κέντρο αξιοπιστίας" και μετά "Ρυθμίσεις Κέντρου αξιοπιστίας" και μετά "Ρυθμίσεις μακροεντολών" και μετά επιλέγεις είτε "Απενεργοποίηση όλων των μακροεντολών με ειδοποίηση" ή "Ενεργοποίηση όλων των μακροεντολών (δεν συνίσταται blah, blah, blah)"

Πατάς ΟΚ,ΟΚ.

 

Αυτά...

Εννοείται ότι τα Αγγλικά menu ούτε που θυμάμαι πως είναι.

Ελπίζω να μην έχω ξεχάσει κάτι σημαντικό.

 

 

@nikomas50 (χιουμοριστικά)

Καταραμένε nikomas50 !!

Αυτό ήταν χειρότερο από το να γράψω τον κώδικα !! :P

Δεν ξαναγράφω τίποτα !!

Δημοσ.

 

@nikomas50 (χιουμοριστικά)

Καταραμένε nikomas50 !!

Αυτό ήταν χειρότερο από το να γράψω τον κώδικα !! :P

Δεν ξαναγράφω τίποτα !!

 

Ας πρόσεχες! (χιουμοριστικά)

Γι' αυτό και εγώ έκανα τις ερωτήσεις σχετικά με το τί ακριβώς θέλει να κάνει αλλά όπως είδες οι απαντήσεις του φίλου δεν ήταν και τόσο κατατοπιστικές και γι' αυτό έφτιαξα κάτι πρόχειρο "κλέβοντας" στοιχεία τόσο από το πρώτο σου post όσο και από αντίστοιχα άλλων "Καλών Σαμαρειτών".

Η όλη ιστορία μου θύμισε την προσπάθειά μου να πείσω φίλο που ήταν άσχετος με το άθλημα να μήν αγοράσει ακριβό υπολογιστή στον οκτάχρονο γυιό του (πριν από δέκα χρόνια) και αφού έψαξα αρκετά και έκανα μια σύνθεση ανάλογη της χρήσης για την οποία προοριζόταν, το αποτέλεσμα ήταν να πάει στο μαγαζί της προτίμησής του και να απευθυνθεί στον υπάλληλο λέγοντας (κυριολεκτώ) : Θέλω το καλύτερο κομπιούτερ που έχεις.

Το αποτέλεσμα το φαντάζεσαι.

Έκτοτε συνήθισα να προσπαθώ να συλλέξω επαρκή στοιχεία σε κάθε περίπτωση πριν απαντήσω αλλά καμιά φορά ξεχνιέμαι και δεν το κάνω.

Αυτά!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...