
06-11-18, 18:37
|
| Όνομα: Γιώργος Έκδοση λογισμικού Office: Ms-Office 2010 Γλώσσα λογισμικού Office: Ελληνική, Αγγλική | | Εγγραφή: 18-06-2010
Μηνύματα: 3.674
| |
Καλησπέρα
Παρακάτω εκφράζω τις απόψεις μου για τους 2 τύπους που προτάθηκαν και τη σχετική κριτική που έγινε από το Σπύρο. 1) Σχετικά με το ζητούμενο Κατά τον Σπύρο, «Κατ' αρχάς και οι δύο τύποι λειτουργούν σωστά, αν οι «αριθμοί» είναι κείμενο, είτε με μορφοποίηση text, είτε με απόστροφο μπροστά.
Με βάση το ζητούμενο, όλοι οι «αριθμοί» ξεκινούν από 6,που σημαίνει, βάλαμε σε τυχαίο ΧΧΧΧ το 06 μπροστά και έγινε αριθμός 06Χ.ΧΧΧ με μορφοποίηση αριθμό και να φαίνεται το διαχωριστικό χιλιάδες..
Όποιοι κι αν είναι αυτοί οι αριθμοί, έχουν ένα limit προς τα κάτω (6 = Χαρακτήρες 1) και ένα limit προς τα επάνω απροσδιόριστο (Χαρακτήρες ν).
Θεωρώ δύσκολο (όχι όμως απίθανο) να υπάρχουν αριθμοί με τρείς ή δύο χαρακτήρες αλλά απίθανο να υπάρχουν αριθμοί με 1 χαρακτήρα, δηλ. μόνο το πρόθεμα 06 = 6». Για μένα έχουμε αριθμούς (όχι κείμενο) που αρχίζουν με το ψηφίο «6», έχουν μέγιστο αριθμό ψηφίων 7 και κατάλληλη μορφοποίηση για να εμφανίζεται το διαχωριστικό «.» των χιλιάδων.
Το ότι είναι αριθμοί και όχι κείμενο, φαίνεται στο αρχείο που ανέβασε ο Σπύρος, από τη στοίχιση δεξιά, την εμφάνιση στη γραμμή των τύπων (δεν υπάρχει διαχωριστικό χιλιάδων) και από τη σχετική μορφοποίηση.
Τους παραπάνω αριθμούς θέλουμε να τους μετατρέψουμε σε κείμενο (όχι αριθμό) βάζοντας στη θέση του αρχικού «6» το «06.», ακολούθως τα υπόλοιπα ψηφία του αριθμού και τέλος κατάλληλο πλήθος μηδενικών, έτσι ώστε μετά το «06.» να έχουμε πάντα 6 ψηφία.
Ο τύπος που έδωσα, αλλά και ο τύπος του Σπύρου καλύπτει ακριβώς το παραπάνω ζητούμενο. 2) Σχετικά με την αξιολόγηση των τύπων Κατά τον Σπύρο «Ο τύπος του Γιώργου είναι συντομότερος και έχει το πλεονέκτημα, ότι δουλεύει και για τους αριθμούς με 3 ή 2 ή 1 χαρακτήρες (που παρέβλεψα ή απέρριψα όπως είπα πιο πάνω) αλλά έχει ένα μειονέκτημα.Το 7 που περιέχει στην =Rept().
Αυτό λύνει όλες τις περιπτώσεις από 7 και κάτω, αλλά αν υπάρχουν «αριθμοί» από 8 και άνω χαρακτήρες αποδίδει #VALUE! ή #ΤΙΜΗ!
Δανείζομαι τις παρακάτω γραμμές από τη βοήθεια της Microsoft
----------------------------------------------------------------------------------------------------------------------------
«...Το σφάλμα #ΤΙΜΗ! είναι ο τρόπος με τον οποίο το Excel δηλώνει ότι υπάρχει κάποιο πρόβλημα με τον τρόπο που πληκτρολογήσατε τον τύπο σας ή με τα κελιά στα οποία κάνετε αναφορά.
Το σφάλμα είναι πολύ γενικό και μπορεί να είναι δύσκολο να βρείτε την ακριβή αιτία του...»
------------------------------------------------------------------------------------------------------------------------------ Ο τύπος που έδωσα, αλλά και ο τύπος του Σπύρου, αφορούν την περίπτωση που το πλήθος των ψηφίων των αρχικών αριθμών δεν υπερβαίνει τα 7.
Αν εφαρμοστούν σε αριθμούς με περισσότερα ψηφία θα επιστρέψουν αντίστοιχα #VALUE! (ή #ΤΙΜΗ!) και False.
Τα αποτελέσματα και των 2 περιπτώσεων σημαίνουν ουσιαστικά ότι κάτι δεν υλοποιείται σωστά.
Νομίζω (ανεξάρτητα από τη γενική τοποθέτηση της Microsoft) ότι ευκολότερα σε ένα συντομότερο τύπο μπορούμε να διαπιστώσουμε τι δεν έγινε σωστά παρά σε ένα μακροσκελή με πολλά ένθετα If. 3) Σχετικά με την αντιμετώπιση αριθμών με περισσότερα από 7 ψηφία Κατά το Σπύρο «Ας υποθέσουμε ότι για να «διορθώσουμε» το πρόβλημα βάζουμε ένα 10, ώστε να είμαστε σίγουροι ότι θα καλύψουμε όλες τις περιπτώσεις έστω κι αν δεν υπάρχουν τέτοιοι «αριθμοί» (limit 8; 9; 10;)
Αν το εφαρμόσουμε σε έναν «αριθμό» 61.234.567 έχουμε 06.123456700.
Αν το εφαρμόσουμε σε έναν «αριθμό» 612.345.678 έχουμε 06.123456000.
Αν το εφαρμόσουμε σε έναν «αριθμό» 6.254 έχουμε 06.254000000.
Καμία από τις περιπτώσεις δεν αποδίδει το επιθυμητό...
Αντίθετα ο τύπος με τις ένθετες =If(), μπορεί να είναι μεγαλύτερος, ίσως και πιο δύσκολος να «στηθεί» αλλά αποδίδει αντίστοιχα FALSE που σημαίνει σαφώς, εκτός εμβέλειας.
Με αυτό το σκεπτικό, πρότεινα τον τύπο με τις ένθετες...
Ο χρήστης, έχει σαφή εικόνα του σφάλματος (εκτός εμβέλειας) και μπορεί να κάνει όποια τροποποίηση θέλει αν θέλει... » Ο τύπος που πρότεινα, όπως ανέφερα, καλύπτει την περίπτωση αρχικών αριθμών με 7 και λιγότερα ψηφία.
Αν θα έπρεπε να καλυφτεί η γενική περίπτωση που ο μέγιστος αριθμός των ψηφίων είναι άγνωστος θα έπρεπε το 7 να προσαρμοστεί κατάλληλα.
Στη θέση του 7, αντί να επιλεγεί αυθαίρετα ένας αριθμός πχ το 10, θα μπορούσε να τοποθετηθεί η έκφραση MAX(LEN($A:$A)).
Έτσι ο τελικός τύπος θα γίνει: ="06." & RIGHT(A1;LEN(A1)-1)& REPT("0";MAX(LEN($A:$A))-LEN(A1)) (τύπος πίνακα).
Στο συνημμένο δίνονται σχετικά παραδείγματα.
Η υλοποίηση της γενικής περίπτωσης με ένθετες IF δε μου φαίνεται εύκολη και ίσως είναι αδύνατη.
Συμπερασματικά και παρά τους προβληματισμούς που διατύπωσε ο Σπύρος, εξακολουθώ να πιστεύω ότι θα πρέπει να προτιμηθεί η πρόταση που δε χρησιμοποιεί ένθετα If, ως απλούστερη και περισσότερο ευέλικτη.
|