Εναλλακτικές μορφές της συνάρτησης IF

Η συνάρτηση:
IF(logical_test;value_if_true;value_if_false) 
είναι ίσως η πιο γνωστή συνάρτηση φύλλου για τη λήψη αποφάσεων στο excel. Αν έχω να αποφασίσω ανάμεσα σε 2 καταστάσεις, δεν υπάρχει καλύτερη λύση από την IF. Ακόμα και αν έχω να αποφασίσω μεταξύ περισσότερων καταστάσεων πάλι την IF θα επιλέξω, διότι δέχεται «φωλιασμένες» IF συναρτήσεις στη θέση των ορισμάτων της. Η παρακάτω συνάρτηση επιστέφει 10, 20, 30, …80 αν στο κελί Α1 είναι αντίστοιχα  1, 2, 3, …8 και έχει 7 φωλιασμένα IF.
 
=IF(A1=1;10;IF(A1=2;20;IF(A1=3;30;IF(A1=4;40;IF(A1=5;50;IF(A1=6;60;IF(A1=7;70;IF(A1=8;80))))))))
Αυτός είναι και ο μέγιστος αριθμός φωλιασμένων IF που μπορώ να έχω, έως την έκδοση 2003 του excel. Από την έκδοση 2007 και μετά ο αριθμός των φωλιασμένων συναρτήσεων είναι 64. Πράγματι πολύ μεγάλος αριθμός. Αλλά η βελτίωση αυτή δεν λύνει το πρακτικό πρόβλημα που υπάρχει με την IF, που είναι ακριβώς αυτό το φώλιασμα, διότι μπορεί η πιο πάνω συνάρτηση και εύκολα να γράφεται και εύκολα να διορθώνεται, στην πραγματική ζωή του excel όμως, καλούμαστε να αποφασίσουμε για πιο σύνθετες  περιπτώσεις, οπού τα ορίσματα της IF είναι από μόνα τους άλλες πιο σύνθετες συναρτήσεις που ίσως έχουν τις δικές τους πολλές παρενθέσεις και οι αλλεπάλληλες ένθετες παρενθέσεις τελικά να δημιουργούν σύγχυση.
Για το λόγο αυτό έχουν  προταθεί διάφοροι μέθοδοι για να ξεπεραστεί το πρόβλημα, ώστε οι συναρτήσεις να είναι εύκολα αναγνώσιμες και διορθώσιμες. Ας δούμε μερικές τέτοιες λύσεις.
Α) Αν όλες οι επιστρεφόμενες τιμές  είναι αλφαριθμητικά (κείμενο) μπορούμε να χρησιμοποιήσουμε την παρακάτω σύνταξη:
=IF(A1=1;"α";)&IF(A1=2;"β";)&IF(A1=3;"γ";)&IF(A1=4;"δ";)&IF(A1=5;"ε";)&IF(A1=6;"ζ";)
Η σύνταξη αυτή μοιάζει πολύ στην κανονική σύνταξη της IF αλλά δεν υπάρχουν φωλιασμένες IF. Κάθε περίπτωση συντάσσεται χωριστά, στη μορφή:
IF(logical_test;value_if_true;)
και όλες μαζί συνενώνονται με το λογικό τελεστή «και» ( & ). Προσέξτε ότι στη θέση του ορίσματος value_if_false δεν γράφουμε τίποτα. Η κάθε μεμονωμένη IF ελέγχει αν επαληθεύετε το logical_test και αν ναι, επιστέφει το δικό της value_if_true και αν όχι «σιωπά» και αναλαμβάνει να επιστρέψει η IF που επαληθεύεται. Θα συμφωνήσετε φαντάζομαι ότι η μέθοδος αυτή δημιουργεί τύπους πιο εύκολα αναγνώσιμους. Δεν υπάρχει περιορισμός στο πλήθος των τελεστών & που μπορούμε να χρησιμοποιήσουμε και το μήκος της συνάρτησης μπορεί να είναι πολύ μεγάλο. (Έως ότου, η έκδοση του excel που χρησιμοποιείτε σας προειδοποιήσει: «Ο τύπος είναι υπερβολικά μεγάλος»). Η μέθοδος αυτή αποδίδεται από τον γνωστό συγγραφέα βιβλίων για το excel John Walkenbach στους B. Ganesh και Alan Williams.
Χρησιμοποιήστε αυτή τη σύνταξη μόνο αν οι αναμενόμενες επιστρεφόμενες από τη συνάρτηση τιμές (τα value_if_true) είναι τιμές κειμένου. Οι αριθμητικές τιμές θα επιστραφούν σαν κείμενο. Ο παρακάτω τύπος:
=IF(A1=1;5+8;)&IF(A1=2;SUM(K1:K12);)&IF(A1=3;AVERAGE(M1:M6);)
θα δουλέψει, αλλά προσέξτε, οι αριθμοί που θα επιστρέψει θα είναι σε μορφή κειμένου. Στην περίπτωση που όλες οι επιστρεφόμενες τιμές είναι αριθμοί χρησιμοποιήστε την παρακάτω σύνταξη, η οποία επιστρέφει πραγματικούς αριθμούς.
=--(IF(A1=1;5+8;)&IF(A1=2;SUM(K1:K12);)&IF(A1=3;AVERAGE(M1:M6);))
ή
=1*(IF(A1=1;5+8;)&IF(A1=2;SUM(K1:K12);)&IF(A1=3;AVERAGE(M1:M6);))
ή
=VALUE(IF(A1=1;5+8;)&IF(A1=2;SUM(K1:K12);)&IF(A1=3;AVERAGE(M1:M6);))
Στην περίπτωση που οι επιστρεφόμενες τιμές είναι άλλοτε κείμενο και άλλοτε αριθμός, όπως εδώ:
 =IF(A1=1;"a";)&IF(A1=2;"b";)&IF(A1=3;30;)&IF(A1=4;40;)
τότε εισάγετε την συνάρτηση σε ένα κελί, ας πούμε το Β1, και παίρνετε τα τελικά αποτελέσματα από ένα άλλο κελί όπου εισάγετε:
=IF(ISNUMBER(--Β1);--Β1;Β1)
Β) Αν όλες οι επιστρεφόμενες τιμές είναι αριθμοί, μπορούμε να αποφύγουμε εντελώς την IF. Δέστε το παρακάτω παράδειγμα:
=(A1=1)*10+(A1=2)*20+(A1=3)*30+(A1=4)*40
Αν στο κελί Α1 είναι η τιμή 1 τότε η σύγκριση Α1=1 θα επιστρέψει TRUE και οι υπόλοιπες συγκρίσεις Α1=2,  Α1=3, Α1=4 θα επιστρέφουν FALSE, και η συνάρτηση θα γίνει αρχικά:
=TRUE*10+FALSE*20+ FALSE *30+ FALSE *40
Επειδή οι λογικές τιμές TRUE  και FALSE όταν συμμετέχουν σε αριθμητικές πράξεις τρέπονται σε αριθμούς  (TRUE=1 και FALSE=0) η συνάρτηση θα γίνει:
=1*10+0*20+ 0*30+ 0*40
και έτσι τελικά η συνάρτηση επιστρέφει σωστά 10.
Όμοια, αν στο κελί Α1 είναι η τιμή 2 η συνάρτηση θα κάνει τους παρακάτω υπολογισμούς:
=(A1=1)*10+(A1=2)*20+(A1=3)*30+(A1=4)*40
= FALSE *10+TRUE *20+ FALSE *30 +FALSE*40
=0*10+1*20+0*30+0*40
=20
Όπως και προηγούμενα, δεν υπάρχει πρακτικός περιορισμός στο πλήθος των τελεστών  +  που μπορούμε να χρησιμοποιήσουμε και το μήκος της συνάρτησης μπορεί να είναι αρκετά μεγάλο.
Φυσικά θα  χρησιμοποιήσετε τη μέθοδο αυτή, μόνο αν οι επιστρεφόμενες τιμές είναι αποκλειστικά αριθμοί, συναρτήσεις που επιστρέφουν αριθμούς ή λογικές τιμές.
Η συνάρτηση:
=(A1=1)*10+(A1=2)*SUM(M1:M100)+(A1=3)*TRUE
θα επιστρέψει 10 αν Α1=1, το άθροισμα των κελιών M1:M100 αν Α1=2 και 1 (TRUE) αν A1=3.
Σημείωση 1η: Σε όλα τα παραδείγματα αυτού του σημειώματος, το logical_test ήταν μια αριθμητική σύγκριση ισότητας αριθμών (Α1=1, Α2=2, κλπ). Αυτό έγινε για λόγους απλότητας των παραδειγμάτων. Φυσικά το  logical_test  μπορεί να είναι οποιαδήποτε απλή ή σύνθετη παράσταση μεταξύ αριθμών, αλφαριθμητικών, τελεστών, συναρτήσεων, αρκεί από αυτή να προκύπτει τιμή  TRUE ή τιμή FALSE, όπως:
=(A1= "a")*10+(AND(A1="b";B1>100))*20+ AND(A1="c"; AVERAGE(B1:B5)>15)*30
=--(IF(A1= "a";10;)&IF(AND(A1="b";B1>100);20;)&IF(AND(A1="c"; AVERAGE(B1:B5)>15);30;))
Σημείωση 2η: Η παρακάτω συνάρτηση με φωλιασμένα IF:
=IF(A1>10;100;IF(A1>20;200;IF(A1>30;300)))
αν στο κελί Α1 υπάρχει η τιμή 50, η οποία επαληθεύει και τα τρία  logical_test, θα επιστρέψει 100, δηλαδή θα επιστρέψει το πρώτο (εξωτερικό) value_if_true.Η ίδια συνάρτηση αν γραφεί με τον τελεστή & (Α μέθοδος) θα επιστρέψει τον αριθμό 100200300 που αποτελεί την συνένωση των τριών value_if_true και αν η συνάρτηση γραφεί με τον τελεστή + (Β μέθοδος) θα επιστέψει 600 δηλαδή το άθροισμα των τριών value_if_true. Χρειάζεται λοιπόν προσοχή όταν συντάσσονται τα logical_test. Αν υπάρχουν τιμές που κάνουν αληθινά περισσότερα από ένα logical_test, τα αποτελέσματα μπορεί να μην είναι τα αναμενόμενα.
Σημείωση 3η: Πριν καταφύγετε στην IF, εξετάστε αν μπορεί να λύσει το πρόβλημά σας, μια από τις συναρτήσεις CHOOSE, VLOOKUP, HLOOKUP.
Με το θέμα αυτό συνεχίσω και σε επόμενο σημείωμα, με μία πιο δυναμική και χωρίς κανένα περιορισμό μέθοδο εναλλακτικής μορφής της συνάρτησης IF.
This entry was posted in excel, Συναρτήσεις φύλλου and tagged , , . Bookmark the permalink.

2 Responses to Εναλλακτικές μορφές της συνάρτησης IF

  1. Ο/Η ΛΟΥΚΙΑ λέει:

    ΘΑ ΜΠΟΡΟΥΣΑΤΕ ΝΑ ΜΕ ΒΟΗΘΗΣΕΤΕ ΓΙΑ ΜΙΑ ΣΥΝΑΡΤΗΣΗ?

  2. Ο/Η vioannis λέει:

    Λουκία, αν στείλεις μια καλή περιγραφή του προβλήματός σου, σου υπόσχομαι ότι θα βάλω τα δυνατά μου….

Τα σχόλια είναι απενεργοποιημένα.