Εμφάνιση ενός μόνο μηνύματος
  #3  
Παλιά 05-04-13, 11:46
Οδυσσέας
Guest
 
Μηνύματα: n/a
Προεπιλογή

Καλημέρα σας.

Ωραίο θέμα-Πολύ ενδιαφέρον, άνοιξες Ελένη.

Να αναλύσω λοιπόν τις προτάσεις μου.

Αρχικά να πώ(ελπίζω να μου επιτρέπει ο Τάσος), ότι για να βρούμε μόνον την (μία) συχνότερη τιμή, μπορούμε να χρησιμοποιήσουμε μία πολύ πιο απλή φόρμουλα και κανονική(Όχι τύπου πίνακα). Δηλ. αν έχουμε για παράδειγμα Ονόματα στην περιοχή Α2:Α30(Το Α1 είναι η επικεφαλίδα), Χρησιμοποιούμε αυτή την φόρμουλα.
Κώδικας:
=INDEX(A2:A1000; MODE(MATCH(A2:A30;A2:A1000;0)))
Έχουμε όμως ένα μειονέκτημα. Αν χρειαζόμαστε να προσθέσουμε ονόματα πέραν του Α30, τότε θα πρέπει κάθε φορά να αλλάζουμε αυτό το κομμάτι της φόρμουλας MATCH(A2:A30;A2:A1000;0))), ανάλογα σε Α31, Α32, Α33 ΚΛΠ. Δεν θα έλεγα ότι είναι και πολύ πρακτικό.

Για αυτό θα χρησιμοποιήσουμε Δυναμικές Ονομαζόμενες Περιοχές(Dynamic Named Ranges).

Πάμε λοιπόν.

Τύποι>>Διαχείριση Ονομάτων>>Δημιουργία.

Στο πλαίσιο Όνομα , ορίζουμε ένα Όνομα. Εγώ επέλεξα Names.

Στο πλαίσιο Αναφορά σε: πληκτρολογούμε αυτόν τον τύπο.

=OFFSET($A$1;0;0;MATCH("*";$A:$A;-1);1

Τώρα λοιπόν έχουμε μία δυναμικά αυτοεπεκτεινόμενη λίστα( μπορείτε να προσθέσετε όσα εσείς Ονόματα θέλετε) στην στήλη Α.

Έτσι λοιπόν χρησιμοποιούμε αυτόν τον τύπο για να πάρουμε το Όνομα που εμφανίζεται τις περισσότερες φορές στην λίστα μας..

=INDEX(Names;MODE(MATCH(Names;Names;0)))

Αυτή η φόρμουλα όμως μας δίνει μόνον το συχνότερο Όνομα. Όχι το 2ο,3ο κλπ…

Έτσι λοιπόν ξεκινώντας από την δεύτερη γραμμή(Η πρώτη γραμμή(Εγώ διάλεξα το κελί Ε2) μπορεί να είναι επικεφαλίδα, αλλιώς να είναι κενή), βάζουμε αυτήν την ARRAY φόρμουλα

Κώδικας:
=INDEX($A$1:$A$100; MODE(IF(($A$1:$A$100<>"") * ISNA(MATCH($A$1:$A$100;$E$1:$E1;0)); MATCH($A$1:$A$100;$A$1:$A$100;0))))
Τραβάμε προς τα κάτω όσο θέλουμε, παίρνοντας έτσι την 2η,3η,4η..κλπ , συχνότερη τιμή.
Όσοι χρησιμοποιούν EXCEL<= 2003, βάζουν την IF(ISERROR, μπροστά για να αποφύγουν τα λάθη όταν τραβάνε προς τα κάτω. Για Excel>2003, την IFERROR.

Κώδικας:
=IF(ISERROR(INDEX($A$1:$A$100; MODE(IF(($A$1:$A$100<>"") * ISNA(MATCH($A$1:$A$100;$E$1:$E6;0));
MATCH($A$1:$A$100;$A$1:$A$100;0))))); "";
INDEX($A$1:$A$100;MODE(IF(($A$1:$A$100<>"") * ISNA(MATCH($A$1:$A$100;$E$1:$E6;0)); MATCH($A$1:$A$100;$A$1:$A$100;0)))))
Κώδικας:
=IFERROR(INDEX($A$1:$A$100; MODE(IF(($A$1:$A$100<>"") * ISNA(MATCH($A$1:$A$100;$E$1:$E7;0));
MATCH($A$1:$A$100;$A$1:$A$100;0)))); "")
Βέβαια η πρότασή μου είναι πάλι, να χρησιμοποιήσουμε Δυναμικές Ονομαζόμενες Περιοχές(Dynamic Named Ranges). Ακολουθούμε τα βήματα που περιέγραψα πιο πάνω. Έτσι η φόρμουλά μας παρουσιάζεται πια ως εξής:

Κώδικας:
=INDEX(Names; MODE(IF((Names<>"") * ISNA(MATCH(Names;$Ε$1:$Ε1;0)); MATCH(Names;Names;0))))
IF(ISERROR ή IFERROR, μπροστά, για τα «λάθη», καθώς “σέρνουμε” προς τα κάτω.

Τι λέτε;


ΥΓ.Από το γραφείο δεν μπορώ να ανεβάσω αρχεία στο Διαδίκτυο. Αν ο Διαχειριστής-οι συντονιστές, κρίνουν ότι θέλουν να χρησιμοποιήσουν την πρότασή μου με κάποιο τρόπο, να ανεβάσω το Σαβ/κο το αρχείο από το σπίτι.

Τελευταία επεξεργασία από το χρήστη gr8styl : 11-04-13 στις 19:35. Αιτία: Διόρθωση πλάτους μηνύματος
Απάντηση με παράθεση