Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Συναρτήσεις] Αμοιβές Αργιών... (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/1311-amoibes-argion.html)

Lefteris 17-08-11 17:34

Αμοιβές Αργιών...
 
1 Συνημμένο(α)
Καλησπέρα σε όλους.

Έχω μία στήλη(Ο), στην οποία θέλω να παίρνω, το σύνολο των υπερωριών ενός εργαζόμενου και να το επεξεργάζομαι. Δηλαδή, υπάρχουν σε στήλες η ώρα άφιξης, η ώρα αναχώρησης και η αφαίρεσή τους, μας κάνει τις ώρες εργασίας τους. Ορίζοντας κάπου ότι το ωράριο, είναι 8 ώρες, σε διπλανή στήλη, μας δίνει το άθροισμα των υπερωριών.Δίπλα, παίρνει από άλλη βάση το καθαρό ημερομίσθιο και δίπλα την αμοιβή των υπερωριών. Εντάξει ως εδώ..Αλλά, όταν η ημερομηνία είναι αργία, τότε η αμοιβή, είναι διαφορετική. Έφτιαξα την στήλη με το ημερομίσθιο και καταλαβαίνει ότι είναι αργία(κρυφές στήλες Α:C), και δεν υπολογίζει ημερομίσθιο, αλλά ....κόλησα στη στήλη των υπερωριών...Δεν μπορώ να το κάνω να καταλάβει, πως όλες οι ώρες, πρέπει να υπολογίζονται, σαν υπερωρία, αν η ημερομηνία είναι αργία, ή Σαβ/κα, ή ειδική Ημέρα....Άρα, μου βγάζει λάθος και το συνολοκό ημερήσιο ποσό αμοιβής.
Τί κάνω λάθος;; Κάποια ιδέα;;

Φιλικά/Λευτέρης

Tasos 17-08-11 21:34

Καλησπέρα Λευτέρη!

Για να είναι πιο κατανοητός και πιο μικρός ο τύπος, όρισε 2 ονόματα!

Περιοχή: Επίσημες αργίες = Holidays
Περιοχή: Ειδικές ημερομηνίες = SpecialDays

Και ο τύπος (παράδειγμα):

Κώδικας:

=IF(K4="";"";IF(OR(WEEKDAY(J4;2)>5;NOT(ISNA(MATCH(J4;Holidays;)));
NOT(ISNA(MATCH(J4;SpecialDays;))));N4;IF(N4<=O$1;0;N4-O1)))

Με τη χρήση της WEEKDAY() ίσως να μη χρειαστείς τις στήλες C, D και E που "φρενάρουν" όλο το σύστημα.



Προσοχή στα κενά κατά την αντιγραφή - επικόλληση.

Φιλικά

Τάσος

Lefteris 18-08-11 10:26

Καλημέρα σε όλους.

Τάσο μου, σε ευχαριστώ πολύ. Δούλεψε άψογα. Προσάρμοσα τον τύπο σου και στην διπλανή στήλη(με INDEX&MATCH), που "φέρνει" τα καθαρά ημερομίσθια, κατήργησα και τις στήλες C ,D ,E,που στην εξέλιξη θα "φρέναραν" το σύστημα. Όλα καλά και προχωράω.

Lefteris 29-08-11 17:32

1 Συνημμένο(α)
Καλησπέρα σε όλους.

Τάσο, προσπαθώ να ενώσω την δουλειά σου με τις καρτέλλες ανα ημερολογιακό διάστημα σε αυτή την δουλειά, αλλά.....κόλλησα. Δεν μου βγαίνει με τίποτα και το χειρότερο είναι, πως ΔΕΝ καταλαβαίνω το γιατί......
Όταν μπορέσεις, ρίχτου μία ματιά σε παρακαλώ. Στο μεταξύ ψάχνω...επιδή με πιέζει και ο χρόνος παράδοσής του.
Όλη η δουλειά, έχει τελειώσει και απομένει αυτό..
Τα λέμε..

Tasos 29-08-11 20:53

Καλησπέρα Λευτέρη!

Φρόντισε τα ονόματα που εμπλέκονται στις συναρτήσεις SUMPRODUCT() να έχουν το ίδιο μήκος (πολύ σημαντικό).

Επίσης πρέπει να προσέξεις ο τύπος δεδομένων να είναι ενιαίος σε κάθε όνομα.

πχ. ο τύπος =IF(I18<>"";J17;"") αν η συνθηκη I18<>"" είναι αληθής θα επιστρέφει αριθμό (ώρα)
διαφορετικά θα επιστρέψει κείμενο ( "" ) με αποτέλεσμα να μη μπορεί να επεξεργαστεί από την .SUMPRODUCT().


Οι τύποι που μπορείς να χρησιμοποιήσεις:

Κώδικας:

H16: =IF(ISBLANK(G16);;INDEX(DataBase!$F$2:$F$8;MATCH(Καταχώρηση!G16;DataBase!$B$2:$B$8;0)))
Κώδικας:

I17: =IF(G18<>"";I17;)
Κώδικας:

J17: =IF(G17<>"";J16;0)
Κώδικας:

K16: =IF(G16="";;SUM(J16-I16))
Κώδικας:

L16: =IF(G16="";;IF(OR(WEEKDAY(F16;
2)>5;NOT(ISNA(MATCH(F16;Holidays;)));NOT(ISNA(MATCH(F16;SpecialDays;))));K16;IF(K16<=CL$13;0;K16-CL$13)))

Κώδικας:

M16: =IF(G16="";;IF(OR(WEEKDAY(F16;2)>5;NOT(ISNA(MATCH(F16;Holidays;)));
NOT(ISNA(MATCH(F16;SpecialDays;))));K16;IF(K16<=CL$13;0;K16-CL$13)))

Κώδικας:

N16: =IF(G16<>"";SUM($CN$13*(L16)*24);)
Καλή συνέχεια!

Τάσος

Lefteris 30-08-11 09:25

1 Συνημμένο(α)
Καλημέρα σε όλους.

Φίλε Τάσο, ευχαριστώ πολύ για τον χρόνο σου, αλλά δυστυχώς δεν μου βγαίνει...

Αν εξαιρέσουμε τον τύπο της στήλης Μ, που θεωρώ πως(απο κεκτημένη ταχύτητα;;;) είναι λάθος(Είναι ίδιος με αυτόν στην στήλη L), νομίζω πως εφάρμοσα σωστά τις υποδείξεις σου.

Το ότι δεν βγαίνει το ζητούμενο, οφείλεται μόνο σε αυτό; ή δεν κατάλαβα κάτι σωστά;;

Tasos 30-08-11 10:15

1 Συνημμένο(α)
Καλημέρα Λευτέρη!
Η Sumproduct() στην συμπεριφέρεται όπως μια συνάρτηση πίνακα και προϋποθέτει:

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

2) Όταν δίνουμε στην Sumproduct() ή σε άλλες συναρτήσεις πίνακα
πίνακες (Arrays) προς επεξεργασία, θα πρέπει οι δεύτεροι να έχουν το ίδιο μέγεθος δηλαδή τον ίδιο αριθμό κελιών και (επαναλαμβάνω) τον ίδιο τύπο δεδομένων ο καθένας τους
για να μπορέσει να τους συγκρίνει.

Επίσης ποτέ δεν συμπεριλαμβάνουμε συγχωνευμένα κελιά σε αυτούς τους πίνακες.

Θα πρέπει λοιπόν , να διορθώσεις την αναφορά των ονομάτων All* του αρχείου σου έτσι που αυτά να έχουν τον ίδιο αριθμό κελιών.

Δες και το παράδειγμα παρακάτω:

Καλή συνέχεια!

Τάσος

Lefteris 30-08-11 19:01

1 Συνημμένο(α)
Καλησπέρα σε όλους.

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

Προσπαθώ στή στήλη Ν, με τον τύπο: =IF(OR(H16>"Database$BD$2;H16<Database$BD$2);"";SUM($CN$13*(L16)*24);) (Με κόκκινο, ο δικός σου τύπος), αλλά ενώ δουλεύει στην στήλη(τον "τραβάω" ίδια με τις διπλανές, μου χαλάει στα Συγκεντρωτικά..
Ο τύπος "λέει": Αν δεν είναι εργάτης, μην γράφεις χρήματα απο Υπερωρίες.. Δηλαδή θέλω να πληρώνονται υπερωρίες ΜΟΝΟΝ οι εργάτες. Οχι οι υπόλοιποι..
Γιατί;;

Tasos 30-08-11 21:06

Λευτέρη,


Στον τύπο γράφεις: =IF(OR(H16>DataBase!$BD$2;H16<DataBase!$BD$2);"";SUM($CN$13*(L16)*24))

Κατ αρχήν, αφού συγκρίνεις κείμενα, ο τελεστής < ή > δεν είναι ο κατάλληλος.

Γιατί όχι: =IF(H16=DataBase!$BD$2;.....

Όμως, ακόμα και αν διορθώσεις το παραπάνω, το πρόβλημα σου δεν θα λυθεί αφού
ο τύπος σου θα είναι: =IF(H16=DataBase!$BD$2;"";SUM($CN$13*(L16)*24))
που επιστρέφει ("") αν πρόκειται για εργάτη(α).


Όπως είπαμε, θα πρέπει οι τύποι σου που σε κάθε περίπτωση να επιστρέφουν τον ίδιο τύπο δεδομένων.

Δύο εισαγωγικά ("") = τιμή με τύπο δεδομένων: κείμενο. Ναι είναι τιμή (Στη VB τη συναντούμε σαν vbNullstring)
Αν πχ στο ένα κελί A1 γράψεις: ="" το κελί δεν είναι κενό και θα πάρει τον τύπο δεδομένων: Κείμενο.

Για του λόγου το αληθές, αφου βάλεις τον παραπάνω τύπο (="") στο A1 δοκίμασε: =ISBLANK(A1).

Συνεπώς, η περιοχή AllIncoming όπου περνάς τον τύπο αυτό, περιέχει δεδομένα με ετεροειδείς τύπους δεδομένων.

Έχεις δηλαδή αριθμούς και κείμενα στην περιοχή αυτή με αποτέλεσμα να μην μπορούν να
επεξεργαστούν από την Sumproduct() αλλά και από σχεδόν όλες τις συναρτήσεις πίνακα.

Αν όμως μετατρέψεις τον τύπο έτσι: =IF(H16=DataBase!$BD$2;0;SUM($CN$13*(L16)*24))
τα περιεχόμενα της περιοχής AllIncoming θα έχουν μόνο έναν τύπο δεδομένων (αριθμό) και θα
μπορούν να επεξεργαστούν απροβλημάτιστα από την Sumproduct().

Καλή συνέχεια!

Τάσος


Lefteris 01-09-11 09:50

Καλημέρα σε όλους και Καλό Μήνα.

Τάσο,τελείωσε. Τα έφτιαξα σύμφωνα με τις υποδείξεις σου, πρόσθεσα αρκετά πράγματα που είναι απαραίτητα, δημιούργησα δύο συγκεντρωτικά φύλλα με όλα τα στοιχεία που μπορεί να χρειαστούμε(Δύο, επειδή άλλα στοιχεία, ενδιαφέρουν τον Λογιστή και άλλα την Διοίκηση) και λειτουργούν όλα κανονικά. Απο σήμερα κιόλας, μπαίνει και στην κυκλοφορία...
Το πιό σημαντικό όμως, είναι πως γιά μιά ακόμη φορά, με έμαθες καινούργια πράγματα, τα οποία θεωρώ πως εμπέδωσα και θα μπορώ να τα χρησιμοποιώ σε άλλες δουλειές.
Να ρωτήσω όμως κάποια πράγματα που δεν έχω καταλάβει, για να έχω(θεωρώ)όλο το πακέτο.

1)Δεν καταλαβαίνω τον ρόλο των κελιών Α1:Α5(Καταχώρηση--=Dates) Μού εξηγείς σε παρακαλώ;

2) Μού γράφεις:
(Αν όμως μετατρέψεις τον τύπο έτσι: =IF(H16=DataBase!$BD$2;0;SUM($CN$13*(L16)*24))
τα περιεχόμενα της περιοχής AllIncoming θα έχουν μόνο έναν τύπο δεδομένων (αριθμό) και θα
μπορούν να επεξεργαστούν απροβλημάτιστα από την Sumproduct().)


Με αυτόν τον τύπο, παίρνουμε το αντίθετο αποτέλεσμα από το ζητούμενο. Παίρνουν Υπερωρίες όλοι οί άλλοι, εκτός απο τους Εργάτες. Τον αντικατέστησα με τον παρακάτω τύπο και πήρα το ζητούμενο αποτέλεσμα. Θεωρώ πως είναι σωστό. Τι λές;

IF(OR(H16>DataBase!$BD$2;H16<DataBase!$BD$2);0;SUM ($CN$13*(L16)*24))

Εκείνο όμως που δεν καταλαβαίνω, είναι πως όλη η εφαρμογή, δουλεύει σωστά ΚΑΙ με αυτόν τον τύπο. Πώς γίνεται αυτό φίλε μου;

IF(OR(H16>DataBase!$BD$2;H16<DataBase!$BD$2);"";SU M($CN$13*(L16)*24))

3) Μού γράφεις:
(Δύο εισαγωγικά ("") = τιμή με τύπο δεδομένων: κείμενο. Ναι είναι τιμή (Στη VB τη συναντούμε σαν vbNullstring)
Αν πχ στο ένα κελί A1 γράψεις: ="" το κελί δεν είναι κενό και θα πάρει τον τύπο δεδομένων: Κείμενο.)


Δεν το ήξερα Τάσο μου! Θεωρούσα πως είναι το ίδιο. Δεν μου είχε τύχει ποτέ να μην μου βγαίνει και να χρειαστεί να ψάξω...!

Ευχαριστώντας σε και πάλι πολύ, περιμένω, όταν μπορέσεις, μία απάντηση στα δύο ερωτήματά μου.

*Ερώτηση τηε τελευταίας στιγμής; Παιά ακριβώς, είναι η δουλειά που κάνει το 0(Μηδέν), σε αυτή τη συνάρτηση; Γαιτί χωρίς το 0, δεν "βγαίνει το αποτέλεσμα;

=INDEX(DataBase!N2:N40;MATCH(O10;Articles;0))


Η ώρα είναι 11:29.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2