![]() |
Απαλοιφή κενών χαρακτήρων σε κελιά Καλημέρα σε όλα τα μέλη.:byebye: Είναι η πρώτη φορά που αναρτώ μία ερώτηση, παρόλο που έχω συμβουλευτεί κάποιες φορές το forum. Σας ευχαριστώ πολύ για αυτό. Θα ήθελα λοιπόν να με συμβουλέψει κάποιος πως μπορώ να εξαλείψω τα κενά διαστήματα μέσα σε κελιά. Τα κελιά είναι της μορφής H 4425, 4425 F K, 4425 FK, D 4425 F H, 4425 U-UI, κ.ο.κ Ευχαριστώ |
1 Συνημμένο(α) Λευτέρη, καλώς όρισες στο ms-office.gr Στο βιβλίο, μια λύση με αντικατάσταση... Σημείωση: Μπορούμε αν θέλουμε, να καταγράψουμε τα βήματα, σε μια μακροεντολή. |
Παράθεση:
:victory::victory::victory::victory::victory::vict ory::victory::victory: Ευχαριστώ πολύ. Το έκανα και με παύλες, τελείες κλπ Βοήθησε αν μπορείς και σε κάτι άλλο. Έχω αριθμούς που χάλασαν. Δλδ από την μορφή 06.χχχχχχχχ έγιναν 6.147.201, 621.852, 61.524 κλπ, δλδ μετατράπηκαν σε χιλιάδες. Πως μπορώ να βάλω σε όλους το προθεμα 06. και μετά να είναι ο αριθμός 6ψήφιος? Αντίστοιχα δλδ να πάρουν την μορφή 06.147201, 06.215820, 06.152400 Ευχαριστώ |
1 Συνημμένο(α) Βάλε: Κώδικας: =IF(LEN(A1)=7;"06."&RIGHT(A1;6);IF(LEN(A1)=6;"06."&RIGHT(A1;5)&"0";IF(LEN(A1)=5;"06."&RIGHT(A1;4)&"00")))*IF(LEN(A1)=4;"06."&RIGHT(A1;3)&"000") |
1 Συνημμένο(α) Καλησπέρα Θα πρότεινα το συντομότερο τύπο: ="06." & RIGHT(A1;LEN(A1)-1)& REPT("0";7-LEN(A1)) |
Παράθεση:
:yahoo::yahoo::yahoo: Ευχαριστώ πάρα πολύ. Σόρρυ που σας κούρασα. Το έκανα με επιτυχία. |
Καλή συνέχεια Λευτέρη. |
Μερικές σκέψεις, για τους δύο τύπους που δίνονται ως λύσεις. Κατ' αρχάς και οι δύο τύποι λειτουργούν σωστά, αν οι «αριθμοί» είναι κείμενο, είτε με μορφοποίηση text, είτε με απόστροφο μπροστά. Με βάση το ζητούμενο, όλοι οι «αριθμοί» ξεκινούν από 6, που σημαίνει, βάλαμε σε τυχαίο ΧΧΧΧ το 06 μπροστά και έγινε αριθμός 06Χ.ΧΧΧ με μορφοποίηση αριθμό και να φαίνεται το διαχωριστικό χιλιάδες... Όποιοι κι αν είναι αυτοί οι αριθμοί, έχουν ένα limit προς τα κάτω (6 = Χαρακτήρες 1) και ένα limit προς τα επάνω απροσδιόριστο (Χαρακτήρες ν) Θεωρώ δύσκολο (όχι όμως απίθανο) να υπάρχουν αριθμοί με τρείς ή δύο χαρακτήρες αλλά απίθανο να υπάρχουν αριθμοί με 1 χαρακτήρα, δηλ. μόνο το πρόθεμα 06 = 6 Ο τύπος του Γιώργου είναι συντομότερος και έχει το πλεονέκτημα, ότι δουλεύει και για τους αριθμούς με 3 ή 2 ή 1 χαρακτήρες (που παρέβλεψα ή απέρριψα όπως είπα πιο πάνω) αλλά έχει ένα μειονέκτημα. Το 7 που περιέχει στην =Rept(). Αυτό λύνει όλες τις περιπτώσεις από 7 και κάτω, αλλά αν υπάρχουν «αριθμοί» από 8 και άνω χαρακτήρες αποδίδει #VALUE! ή #ΤΙΜΗ! *Δανείζομαι τις παρακάτω γραμμές από τη βοήθεια της Microsoft -------------------------------------------------------------------------------------------------------------------------------- «...Το σφάλμα #ΤΙΜΗ! είναι ο τρόπος με τον οποίο το Excel δηλώνει ότι υπάρχει κάποιο πρόβλημα με τον τρόπο που πληκτρολογήσατε τον τύπο σας ή με τα κελιά στα οποία κάνετε αναφορά. Το σφάλμα είναι πολύ γενικό και μπορεί να είναι δύσκολο να βρείτε την ακριβή αιτία του...» -------------------------------------------------------------------------------------------------------------------------------- Ας υποθέσουμε ότι για να «διορθώσουμε» το πρόβλημα βάζουμε ένα 10, ώστε να είμαστε σίγουροι ότι θα καλύψουμε όλες τις περιπτώσεις έστω κι αν δεν υπάρχουν τέτοιοι «αριθμοί» (limit 8; 9; 10;) Αν το εφαρμόσουμε σε έναν «αριθμό» 61.234.567 έχουμε 06.123456700 Αν το εφαρμόσουμε σε έναν «αριθμό» 612.345.678 έχουμε 06.123456000 ... ... Αν το εφαρμόσουμε σε έναν «αριθμό» 6.254 έχουμε 06.254000000 Καμία από τις περιπτώσεις δεν αποδίδει το επιθυμητό... Αντίθετα ο τύπος με τις ένθετες =If(), μπορεί να είναι μεγαλύτερος, ίσως και πιο δύσκολος να «στηθεί» αλλά αποδίδει αντίστοιχα FALSE που σημαίνει σαφώς, εκτός εμβέλειας. Με αυτό το σκεπτικό, πρότεινα τον τύπο με τις ένθετες... Ο χρήστης, έχει σαφή εικόνα του σφάλματος (εκτός εμβέλειας) και μπορεί να κάνει όποια τροποποίηση θέλει αν θέλει... Όσον αφορά την ταχύτητα υπολογισμού, για αυτό το θέμα δεν τίθεται ζήτημα... |
1 Συνημμένο(α) Καλησπέρα Παρακάτω εκφράζω τις απόψεις μου για τους 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, ως απλούστερη και περισσότερο ευέλικτη. |
Αυτά που διατύπωσα ως σκέψεις, δεν είναι σε καμία περίπτωση, προτροπή, για να χρησιμοποιηθεί ο τύπος με τις ένθετες, αντί για τον τύπο του Γιώργου... Είναι η αποτύπωση, του γιατί εγώ επέλεξα τις ένθετες, στο συγκεκριμένο ζητούμενο. Ο λόγος (να επαναλάβω) είναι, η αποτύπωση σφάλματος #VALUE! vs FALSE, που σε καμία περίπτωση δεν μπαίνουν στην ίδια ζυγαριά... Είναι σαν να μου λέει κάποιος, ότι αν έχω στο a1=5 και στο b1=7 τότε αν βάλω στο c1 =a1=b1, το False που θα πάρω ως αποτέλεσμα, είναι... σφάλμα. Όχι σφάλμα δεν είναι αλλά είναι Logical Value... Με ότι σημαίνει αυτό... Όσο για τους αριθμούς και τα κείμενα... Φυσικά και τα δεδομένα είναι αριθμοί... Μόνο που, επειδή το τσέκαρα και με κείμενα, είπα απλά ότι «δουλεύουν και με κείμενα» αν κανείς θέλει ή έχει τέτοια μορφή... |
| Η ώρα είναι 04:44. |
Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.