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

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 07-02-10, 12:16
Το avatar του χρήστη gr8styl
Super Moderator
Όνομα: Θανάσης Στυλιανίδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-10-2009
Περιοχή: Βρυξέλλες, Βέλγιο
Μηνύματα: 758
Προεπιλογή Επαλήθευση επικύρωση ΑΦΜ (με λάθη)

Παράθεση:
Αρχική Δημοσίευση από nisgia Εμφάνιση μηνυμάτων
...
Ορίστε ένας ακόμη τύπος ο οποίος ελέγχει την εγκυρότητα ενός Α.Φ.Μ.
και πιστεύω πως θα φανεί χρήσιμος σε όσους μαζεύουν αποδείξεις λιανικής
και χρησιμοποιούν το Excel για την καταχώρησή τους.
Κώδικας:
=IF(G5<>"";IF(AND(NOT(ISERROR(--G5));LEN(G5)=9);
IF(MOD(MOD(SUM(MID(G5;9-{1;2;3;4;5;6;7;8};1)*(2^{1;2;3;4;5;6;7;8}));11);10)=--RIGHT(G5;1);
"Έγκυρος Α.Φ.Μ.";"Μη έγκυρος Α.Φ.Μ.");"Λάθος καταχώρηση!");"")
...
Μπράβο Γιάννη πολύ καλό
έτσι για ανταπόδοση των "compliments"

Αν μου επιτρέπεις το MOD(....;10) δεν χρειάζεται αφου έχεις --RIGHT(G5;1)
και αν θέλουμε να μικρύνει ακόμα περισσότερο θα έλεγα ούτε το NOT

Τι λες για αυτόν (τα κελιά που περιέχουν τον ΑΦΜ είναι κείμενο όπως προείπες)
Κώδικας:
=IF(M5<>"";IF(OR(ISERROR(--M5);LEN(M5)<>9);"Λάθος καταχώρηση!";
IF(MOD(SUM(MID(M5;9-{1;2;3;4;5;6;7;8};1)*(2^{1;2;3;4;5;6;7;8}));11)=--RIGHT(M5;1);
"Έγκυρος Α.Φ.Μ.";"Μη έγκυρος Α.Φ.Μ."));"")
Κερδίζουμε 6 bytes ανά κελί που περιέχει τον τύπο στο τελικό αποθηκευμένο βιβλίο

ή αν τα κελιά που περιέχουν τον ΑΦΜ δεν είναι απαραίτητα κείμενο, θα έλεγα
Κώδικας:
=IF(M6<>"";IF(OR(ISERROR(--M6);LEN(M6)>9);"Λάθος καταχώρηση!";
IF(MOD(SUM(MID(RIGHT(REPT("0";9)&M6;9);9-{1;2;3;4;5;6;7;8};1)*(2^{1;2;3;4;5;6;7;8}));11)=--RIGHT(M6;1);
"Έγκυρος Α.Φ.Μ.";"Μη έγκυρος Α.Φ.Μ."));"")
όπου το κέρδος είναι όμως μόνον 1 byte ανά κελί που περιέχει τον τύπο (παρά του ότι ο τύπος είναι μακρύτερος).
Όλα για το κέρδος γιατί έρχονται δύσκολες μέρες

Τα λέμε
Θανάσης
ΥΓ Οι μετρήσεις έγιναν με Excel 2002 Ελληνικό

Τελευταία επεξεργασία από το χρήστη gr8styl : 09-02-10 στις 00:43. Αιτία: add prefix
Απάντηση με παράθεση
  #2  
Παλιά 08-02-10, 10:26
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή Επαλήθευση επικύρωση ΑΦΜ (με λάθη)

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

Δείτε το και με τύπο πίνακα:

Δεν είχα περιθώρια να ελέγξω τον τύπο με περισσότερα ΑΦΜ αλλά τουλάχιστον κάνει το ίδιο που κάνουν και οι υπόλοιποι τύποι στο θέμα αυτό.

Κώδικας:
{=IF(A1<>"";IF(LEN(A1)=9;IF(MOD(SUM(MID(A1;9-ROW($1:$8);1)*2^ROW($1:$8));11)=RIGHT(A1;1)*1;"ΟΚ!";"Άκυρο!")
;"Λάθος καταχώρηση!");"")} Προσοχή! Τύπος Πίνακα (CSE) 


Τα λέμε..

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη gr8styl : 09-02-10 στις 00:43. Αιτία: add prefix
Απάντηση με παράθεση
  #3  
Παλιά 08-02-10, 21:31
Το avatar του χρήστη nisgia
Super Moderator
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 12-10-2009
Περιοχή: Ηγουμενίτσα
Μηνύματα: 161
Προεπιλογή Επαλήθευση επικύρωση ΑΦΜ

Καλησπέρα!
Παράθεση:
Αρχική Δημοσίευση από gr8styl Εμφάνιση μηνυμάτων
Αν μου επιτρέπεις το MOD(....;10) δεν χρειάζεται αφου έχεις --RIGHT(G5;1)
Δυστυχώς φίλοι μου η MOD(....;10) είναι απαραίτητη στην περίπτωση που η MOD(....;11) επιστρέφει 10
και αυτό σίγουρα δεν ισούται με το τελευταίο ψηφίο του Α.Φ.Μ.

Επίσης ο έλεγχος ISERROR(--G5) είχε μπει για απόκρυψη της τιμής σφάλματος #VALUE!
έτσι ώστε να είναι πιο φιλική προς το χρήστη η "φόρμα" εισαγωγής.

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

Οπότε μάλλον η πιο συντομευμένη έκδοση είναι αυτή του Τάσου η οποία γλιτώνει αρκετούς χαρακτήρες
από τους σταθερούς πίνακες με τη χρήση της ROW().
Αρκεί να προστεθεί και η MOD(....;10) για σωστά αποτελέσματα αλλά και προαιρετικά η ISERROR(--G5).
__________________
Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...!
-----------------------------------------------
Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης.
Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά!

Τελευταία επεξεργασία από το χρήστη gr8styl : 09-02-10 στις 00:45. Αιτία: add prefix
Απάντηση με παράθεση
  #4  
Παλιά 08-02-10, 23:53
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή Επαλήθευση επικύρωση ΑΦΜ (με λάθη)

Καλησπέρα Γιάννη μου.

Παράθεση:
Αρχική Δημοσίευση από nisgia Εμφάνιση μηνυμάτων
Αρκεί να προστεθεί και η MOD(....;10) για σωστά αποτελέσματα αλλά και προαιρετικά η ISERROR(--G5).
Είναι έτσι εντάξει;
Κώδικας:
{=IF(A1<>"";IF(LEN(A1)=9;IF(MOD(MOD(SUM(MID(A1;9-ROW($1:$8);1)*2^ROW($1:$8))*1;10)=RIGHT(A1;1)*1;10);"ΟΚ!";
"Άκυρο!");"Λάθος καταχώρηση!");"")}
Τη συνάρτηση αυτή δεν κατόρθωσα να την κάνω να μου εμφανίσει #VALUE! .

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 09-02-10 στις 00:54. Αιτία: add prefix
Απάντηση με παράθεση
  #5  
Παλιά 09-02-10, 00:36
Το avatar του χρήστη gr8styl
Super Moderator
Όνομα: Θανάσης Στυλιανίδης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-10-2009
Περιοχή: Βρυξέλλες, Βέλγιο
Μηνύματα: 758
Προεπιλογή Επαλήθευση επικύρωση ΑΦΜ

Παράθεση:
Αρχική Δημοσίευση από nisgia Εμφάνιση μηνυμάτων
Δυστυχώς φίλοι μου η MOD(....;10) είναι απαραίτητη στην περίπτωση που η MOD(....;11) επιστρέφει 10
και αυτό σίγουρα δεν ισούται με το τελευταίο ψηφίο του Α.Φ.Μ.
Πολύ σωστά Γιάννη
το MOD(...;10) είναι αναγκαίο.
Μπερδεύτικα με την RIGHT(..;1) που παίρνει μόνο το τελευταίο ψηφίο, του ΑΦΜ όμως και όχι του αποτελέσματος της MOD(..;11)

Θα συμφωνήσω ακόμα ότι η πρόταση του Τάσου με χρήση συνάρτησης πίνακα είναι η οικονομικότερη. Μάλλον εγώ τον παρέσυρα και παρέλειψε και αυτός το MOD(...;10)

Συγνώμη για το μπέρδεμα.

Θανάσης
ΥΓ. Το έχω πει ότι μου αρέσουν οι παρατηρήσεις διορθώνομαι
Απάντηση με παράθεση
  #6  
Παλιά 09-02-10, 00:42
Το avatar του χρήστη nisgia
Super Moderator
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 12-10-2009
Περιοχή: Ηγουμενίτσα
Μηνύματα: 161
Προεπιλογή

Δεκτή η συγγνώμη σου Θανάση αλλά η EXELιξη έτσι είναι. Try and error!
...Χρόνια τώρα!
__________________
Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...!
-----------------------------------------------
Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης.
Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά!
Απάντηση με παράθεση
  #7  
Παλιά 09-02-10, 01:26
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Έχεις δίκιο! Έτσι την έχω κι εγώ αλλά απλά επικόλλησα λάθος συνάρτηση!
Δεν βγάζει όμως σε καμία περιπτωση #VALUE!.
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
Απάντηση στο θέμα

Ετικέτες
εξάμηνο, συναρτήσεις, τρίμηνο


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

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



Η ώρα είναι 15:35.