Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Excel > Excel - Ερωτήσεις / Απαντήσεις > [Excel07] Επεξήγηση συμπεριφοράς συνάρτησης

Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ.

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 28-08-13, 11:16
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 25-06-2013
Μηνύματα: 221
Προεπιλογή Επεξήγηση συμπεριφοράς συνάρτησης

Γεια σε όλους.
Έχω 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  
Παλιά 28-08-13, 14:16
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Καλημέρα Γιώργο!

Η συνάρτηση SUM() αθροίζει μόνο τα κελιά εκείνα που περιέχουν αριθμό. Τα υπόλοιπα τα αγνοεί.
Άρα στην προκειμένη περίπτωση η ISNUMBER() είναι περιττή.

Όσο για τη συμπεριφορά της συνάρτησης SUM() :

Στους πειραματισμούς σου η συνάρτηση ISNUMBER() στο σημείο που έχει τοποθετηθεί θα αναγκάσει την SUM() να αθροίσει τα κελιά που περιέχουν κείμενο και ενδεχομένως να μην επιστρέψει τα αναμενόμενα.

Ένας τρόπος να χρησιμοποιηθεί σωστά η ISNUMBER() φαίνεται στην παρακάτω εικόνα:

Επεξήγηση συμπεριφοράς συνάρτησης-image1.png

Ελπίζω να σου έδωσα τροφή για περαιτέρω πειραματισμούς.

Με εκτίμηση

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #3  
Παλιά 28-08-13, 20:24
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 25-06-2013
Μηνύματα: 221
Προεπιλογή

Ευχαριστώ Τάσο για την άμεση απάντηση.

Το θέμα εδώ δεν είναι η 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  
Παλιά 29-08-13, 10:06
Το avatar του χρήστη Spirosgr
Συντονιστής
Όνομα: Σπύρος Τσιλιγιάννης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010, Ms-Office 2013, Ms-Office 2016, Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 22-11-2011
Περιοχή: Αθήνα
Μηνύματα: 2.321
Προεπιλογή

Καλημέρα
Η συνάρτηση =SUM(IF(AND(ISNUMBER(B1:B10);1=1);B1:B10;0)) δουλεύει κανονικά αρκεί να είναι σωστές οι συνθήκες της AND
Όταν λες ότι ISNUMBER(B1:B10) και αντί για αριθμό έχει διάφορες μορφές
τότε λογικά δεν λειτουργεί
Αν βάλεις άλλου είδους συνθήκες (βλέπε φώτο) τότε όλα είναι καλά και λειτουργεί
Ακόμα αν βάλεις αριθμούς στην Β:Β στήλη τότε δεν χρειάζεται να είναι και τύπος πίνακα αλλά λειτουργεί σαν απλή συνάρτηση
ΥΓ στην φώτο εκ παραδρομής η λέξη Type γράφτηκε Typy
Συνημμένα Thumbnails
Επεξήγηση συμπεριφοράς συνάρτησης-katagrafi.png  
Απάντηση με παράθεση
  #5  
Παλιά 29-08-13, 18:48
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 25-06-2013
Μηνύματα: 221
Προεπιλογή

Η συνάρτηση με το 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  
Παλιά 29-08-13, 19:03
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 22-08-2013
Μηνύματα: 33
Προεπιλογή

Καλησπέρα και από εμένα,

Ο λόγος που δεν παίρνεις τα αποτελέσματα που θες Γιώργο είναι επειδή η συνάρτηση 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  
Παλιά 31-08-13, 22:18
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 25-06-2013
Μηνύματα: 221
Προεπιλογή

Ευχαριστώ Γιώργο για την απάντηση.

Τα παραδείγματα που αναφέρεις είναι ήδη γνωστά. Όπως είπα με ενδιαφέρει η λογική πίσω απο τις συναρτήσεις και όχι οι ίδιες οι συναρτήσεις. Το σύμβολο του πολλαπλασιασμού δίνει αποτελέσματα γιατί μετατρέπει τους πίνακες σε μια ακολουθία 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  
Παλιά 01-09-13, 09:15
Το avatar του χρήστη gr8styl
Super Moderator
Όνομα: Θανάσης Στυλιανίδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 19-10-2009
Περιοχή: Βρυξέλλες, Βέλγιο
Μηνύματα: 758
Προεπιλογή

Αγαπητέ Γιώργο (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  
Παλιά 01-09-13, 22:15
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 25-06-2013
Μηνύματα: 221
Προεπιλογή

Αγαπητέ Θανάση
Έχω ήδη γράψει, ότι για να πάρεις μια ακολουθία 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.

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

Ευχαριστώ για την απάντηση.
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός 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.