Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ. |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Επεξήγηση συμπεριφοράς συνάρτησης
Γεια σε όλους. Έχω 2 στήλες στο Excel, ας πούμε Α1:Α10 και Β1:Β10. Η πρώτη έχει format κείμενο σε όλα τα κελιά της, ενώ η δεύτερη περιέχει όλων των μορφών τα δεδομένα. Πειραματίζομαι με κάποιες συναρτήσεις με αυτές τις στήλες όχι με κάποιο ιδιαίτερο σκοπό, απλά για την εξάσκηση και την απόκτηση εμπειρίας. Βάζω την παρακάτω φόρμουλα στο Β12: {=SUM(IF(LEN(TRIM(A1:A10))>0;B1:B10;0))} και δουλεύει κανονικά αν όμως προσπαθήσω να δυσκολέψω λίγο την παραπάνω φόρμουλα και βάλω και μια συνθήκη AND(), μου βγάζει 0, ότι και αν βάλω. Για παράδειγμα: {=SUM(IF(AND(LEN(TRIM(A1:A10))>0;ISNUMBER(B1:B10)) ;B1:B10;0))} βγάζει 0 ή {=SUM(IF(AND(LEN(TRIM(A1:A10))>0;B1:B10=25);B1:B10 ;0))} βγάζει 0 Ακόμη και σε μία προφανή αληθή συνθήκη. Για παράδειγμα {=SUM(IF(AND(LEN(TRIM(A1:A10))>0;1=1);B1:B10;0))} βγάζει 0. Ξέρει κανείς το σκεπτικό της συμπεριφοράς αυτής; Ευχαριστώ. |
#2
| ||||
| ||||
Καλημέρα Γιώργο! Η συνάρτηση SUM() αθροίζει μόνο τα κελιά εκείνα που περιέχουν αριθμό. Τα υπόλοιπα τα αγνοεί. Άρα στην προκειμένη περίπτωση η ISNUMBER() είναι περιττή. Όσο για τη συμπεριφορά της συνάρτησης SUM() : Στους πειραματισμούς σου η συνάρτηση ISNUMBER() στο σημείο που έχει τοποθετηθεί θα αναγκάσει την SUM() να αθροίσει τα κελιά που περιέχουν κείμενο και ενδεχομένως να μην επιστρέψει τα αναμενόμενα. Ένας τρόπος να χρησιμοποιηθεί σωστά η ISNUMBER() φαίνεται στην παρακάτω εικόνα: Ελπίζω να σου έδωσα τροφή για περαιτέρω πειραματισμούς. Με εκτίμηση Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
#3
| |||
| |||
Ευχαριστώ Τάσο για την άμεση απάντηση. Το θέμα εδώ δεν είναι η ISNUMBER() ή η οποιαδήποτε άλλη συνάρτηση. Το ζήτημα είναι γιατί δεν μπορεί να δουλέψει το AND σε αυτή τη φόρμουλα ακόμη και για απολύτως αληθείς συνθήκες. Έτσι κι αλλιώς αν για παράδειγμα βάλω: {=SUM(IF(ISNUMBER(B1:B10);B1:B10;0))} δουλεύει ότι και αν έχω στη Β. Αν εδώ προσθέσω ένα AND με αληθή συνθήκη, για παράδειγμα: {=SUM(IF(AND(ISNUMBER(B1:B10);1=1);B1:B10;0))} η συνθήκη πάει στο 0, παρότι δεν έχει αλλάξει κάτι. Εδώ μάλλον κάτι γίνεται με πράξεις μεταξύ TRUE, FALSE και σειρών δεδομένων, αλλά δεν έβγαλα ακόμη άκρη. Ευχαριστώ. |
#4
|
Καλημέρα Η συνάρτηση =SUM(IF(AND(ISNUMBER(B1:B10);1=1);B1:B10;0)) δουλεύει κανονικά αρκεί να είναι σωστές οι συνθήκες της AND Όταν λες ότι ISNUMBER(B1:B10) και αντί για αριθμό έχει διάφορες μορφές τότε λογικά δεν λειτουργεί Αν βάλεις άλλου είδους συνθήκες (βλέπε φώτο) τότε όλα είναι καλά και λειτουργεί Ακόμα αν βάλεις αριθμούς στην Β:Β στήλη τότε δεν χρειάζεται να είναι και τύπος πίνακα αλλά λειτουργεί σαν απλή συνάρτηση ΥΓ στην φώτο εκ παραδρομής η λέξη Type γράφτηκε Typy |
#5
| |||
| |||
Η συνάρτηση με το AND() δουλεύει κανονικά μόνο αν το ISNUMBER() είναι αληθής σε όλη τη στήλη, εν αντιθέσει με το εαν είναι είναι μόνη της, οπότε δεν χρειάζεται να είναι παντού αληθής. Τελικά το έψαξα το θέμα και νομίζω ότι κατάλαβα τη λογική της συνθήκης. Αυτό που μάλλον συμβαίνει είναι ότι όταν έχουμε AND(ISNUMBER(B1:B10);1=1), τότε η φόρμουλα εξετάζει τη σχέση: Πίνακας Β1:Β10 και μεμονωμένη συνθήκη 1=1. Για να βγει TRUE αυτή η συνθήκη θα πρέπει να είναι TRUE AND TRUE. Για να βγει όμως TRUE ο Πίνακας ISNUMBER(B1:B10) θα πρέπει και όλα τα στοιχεία του να είναι TRUE. Αυτό δεν θα συνέβαινε εαν δεν είχαμε μεμονωμένη συνθήκη αλλά όμοιο Πίνακα με τον Β1:Β10 π.χ. C1:C10. Εκεί μάλλον ο έλεγχος TRUE / FALSE θα γινόταν για κάθε σειρά Bi,Ci, οπότε για κάποιες σειρές θα έβγαινε TRUE και για κάποιες άλλες FALSE. Εδώ όμως δεν μπορεί να γίνει κάτι τέτοιο και όλος ο Πίνακας Β1:Β10 πρέπει να πάει "πακέτο" TRUE για να ισχύει η συνθήκη με το 1=1. Ελπίζω να μην σας μπέρδεψα. Ευχαριστώ για τις απαντήσεις. |
#6
| |||
| |||
Καλησπέρα και από εμένα, Ο λόγος που δεν παίρνεις τα αποτελέσματα που θες Γιώργο είναι επειδή η συνάρτηση AND, όπως τη χρησιμοποιείς στα παράδειγματα σου, δεν υποστηρίζει συναρτήσεις τύπου πίνακα. Η AND επιστρέφει ένα αποτέλεσμα και όχι ένα πίνακα όπως ζητάς εσύ, όπως ανέφερε έμμεσα στο παράδειγμα του και ο Σπύρος. Για να φέρεις τα αποτελέσματα που θες πρέπει να χρησιμοποιήσεις το σύμβολο του πολλαπλασιαμού, όπως πολύ σωστά έδειξε στο παράδειγμα του ο Τάσος. Για να το καταλάβεις καλύτερα. Αν στο παράδειγμα σου {=SUM(IF(AND(LEN(TRIM(A1:A10))>0;ISNUMBER(B1:B10)) ;B1:B10;0))} χρησιμοποιήσεις αυτήν τη συνάρτηση {=SUM(IF(LEN(TRIM(A1:A10))>0 * ISNUMBER(B1:B10),B1:B10,0))} θα έχεις τα αποτελέσματα που θες. Η ISNUMBER είναι αλήθεια ότι δε χρειάζεται πάντα. Όμως εδώ επειδή υπολογΊζεις πίνακες, δηλαδή συνθήκες TRUE ή FALSE υπάρχει πιθανότητα ένας από τους επιμέρους υπολογισμούς στη μνήμη να δώσει το λάθος # VALUE. Τότε η SUM δε θα λειτουργήσει. Οπότε καλό θα ήταν να το χρησιμοποιείς ανάλογα την περίπτωση. Στα παραδείγματα σου βγαίνει αποτέλεσμα 0 γιατί υπάρχει η IF μέσα. Το αληθές τμήμα δεν έρχεται ποτέ και σου βγαίνει το ψευδές που έχεις βάλει τιμή 0. Βάλε μια άλλη τιμή και πχ: 111 και αποτέλεσμα θα πάρεις 111. Επίσης αν το παρακάτω {=SUM(IF(AND(LEN(TRIM(A1:A10))>0;B1:B10=25);B1:B10 ;0))} το κάνεις {=SUM(IF(LEN(TRIM(A1:A10))>0 * (B1:B10=25);B1:B10 ;0))} θα πάρεις αποτέλεσμα. Ελπίζω να σε βοήθησα Γιώργος |
#7
| |||
| |||
Ευχαριστώ Γιώργο για την απάντηση. Τα παραδείγματα που αναφέρεις είναι ήδη γνωστά. Όπως είπα με ενδιαφέρει η λογική πίσω απο τις συναρτήσεις και όχι οι ίδιες οι συναρτήσεις. Το σύμβολο του πολλαπλασιασμού δίνει αποτελέσματα γιατί μετατρέπει τους πίνακες σε μια ακολουθία T/T/F/...T/T.. κλπ. , πολλαπλασιάζοντας τα στοιχεία τους. Ενδεχομένως και το + ή το -, να μπορεί να δώσει ανάλογα αποτελέσματα. Σχετικά με το αν η συνθήκη AND() υποστηρίζει συναρτήσεις πίνακα, νομίζω ότι θέλει λίγο ψάξιμο. Αν βάλεις την παρακάτω συνάρτηση πίνακα: {=AND(LEN(TRIM(A1:A10))>0;ISNUMBER(B1:B10))} και παίξεις με τα A1:A10 και B1:B10 θα δεις ότι τα βγάζει όλα TRUE ή όλα FALSE, ανάλογα με τα στοιχεία που περιέχονται στα A1:A10 και B1:B10. κάτι που μάλλον σημαίνει ότι αντιλαμβάνεται πίνακες, αλλά ως ολότητα και όχι ως μεμονωμένα στοιχεία, όπως με πράξεις μεταξύ πινάκων που ανέφερες και εσύ. Ευχαριστώ. |
#8
|
Αγαπητέ Γιώργο (George R). Νομίζω ότι από όσα έχουν ειπωθεί/γραφτεί είναι σαφές ότι οι λογικές συναρτήσεις (AND, OR) όταν χρησιμοποιούνται σε συναρτήσεις πίνακα (array fomulas) δεν αποδίδουν πίνακα αλλά μεμονωμένες τιμές. Δηλαδή η {=AND({TRUE;FALSE;TRUE};{TRUE;TRUE;TRUE})} αποδίδει μια τιμή {FALSE} και όχι τρεις {TRUE;FALSE;TRUE} Γι'αυτό άλλωστε και η συνάρτηση {=AND(ISNUMBER(B1:B5);LEN(B1:B3)>0)} δεν δίνει Error ( αναμενόμενο για συνάρτηση πίνακα αφού η ISNUMBER(B1:B5) αποδίδει 5 τιμές ενώ η LEN(B1:B3)>0 μόνο 3). Αν θέλεις να επιτύχεις πίνακα από δυαδικές (boolean) τιμές (True - False) μέσα σε συνάρτηση πίνακα θα πρέπει να χρησιμοποιήσεις πολλαπλασιασμό(*) για AND ή πρόσθεση(+) για OR. Δηλαδή για να πάρεις {TRUE;FALSE;TRUE} στο παραπάνω παράδειγμα 3 τιμών θα πρέπει να χρησιμοποιήσεις {=({TRUE;FALSE;TRUE}*{TRUE;TRUE;TRUE})} αντί για {=AND({TRUE;FALSE;TRUE};{TRUE;TRUE;TRUE})} Αν θέλεις, ανέβασε συγκεκριμένο παράδειγμα με τα δεδομένα σου, (περιεχόμενα των Α1:Α5 ή/και Β1:Β5) και πες μας τι περιμένεις να πάρεις με συνάρτηση πίνακα, για να βοηθήσουμε αν χρειάζεται. Καλή συνέχεια. Θανάσης |
#9
| |||
| |||
Αγαπητέ Θανάση Έχω ήδη γράψει, ότι για να πάρεις μια ακολουθία T/F.. πρέπει να έχεις πράξεις μεταξύ πινάκων (και μάλιστα όπως ανέφερα όχι μόνο απαραίτητα με το * αλλά και με το + ή -). Εκτιμώ ότι, η συνάρτηση που αναφέρεις {=AND(ISNUMBER(B1:B5);LEN(B1:B3)>0)} δεν δίνει Error, όχι επειδή δεν διαθέτουν ίδιο αριθμό ανάλογων στοιχείων (5 και 3), αλλά λόγω του ότι δεν απαιτούνται πράξεις μεταξύ αυτών των πινάκων. Πιο συγκεκριμένα: Το πρώτο μέρος της AND(), το ISNUMBER(B1:B5) ζητά,ανεξάρτητα με των αριθμό των στοιχείων του, να διαπιστώσει αν η συνθήκη είναι TRUE ή FALSE. Όμοια το δεύτερο μέρος της AND(), το LEN(B1:B3)>0, πάλι ανεξάρτητα με των αριθμό των στοιχείων του είναι TRUE ή FALSE. Άρα τελικά έχουμε μια συνάρτηση του τύπου AND(T/F;T/F) που δίνει TRUE ή FALSE. Δηλαδή το διαχωριστικό ; δεν κάνει πράξεις μεταξύ των 2 συνθηκών αλλά τις εξετάζει αυτόνομα, και βγάζει το τελικό αποτέλεσμα, με βάση τους κανόνες της άλγεβρας Boolean. Σχετικά με το παράδειγμα που έχω, το ολοκλήρωσα, απλά όπως είπα ψάχνω το συγκεκριμένο ζήτημα από ενδιαφέρον. Ευχαριστώ για την απάντηση. |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
[Συναρτήσεις] Τύπος συνάρτησης | vangelis1964 | Excel - Ερωτήσεις / Απαντήσεις | 8 | 24-10-15 13:55 |
[Συναρτήσεις] Αλλαγή συνάρτησης | xristos | Excel - Ερωτήσεις / Απαντήσεις | 5 | 22-05-15 21:56 |
[VBA] Επεξήγηση "εντολών" | Βασίλης Καραχάλιος | Excel - Ερωτήσεις / Απαντήσεις | 2 | 29-09-14 13:10 |
Αναλυτική επεξήγηση των σχέσεων της MsAccess 2007 | kon73 | Access - Tips & Tricks | 0 | 10-11-09 08:39 |
Αναλυτική επεξήγηση των σχέσεων της MsAccess 2007 | kon73 | Access - Ερωτήσεις / Απαντήσεις | 0 | 09-02-09 21:03 |
Η ώρα είναι 21:09.