Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Excel07] Απαλοιφή κενών χαρακτήρων σε κελιά (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/5065-apaloifi-kenon-xaraktiron-se-kelia.html)

LefterisA 04-11-18 09:44

Απαλοιφή κενών χαρακτήρων σε κελιά
 
Καλημέρα σε όλα τα μέλη.:byebye:

Είναι η πρώτη φορά που αναρτώ μία ερώτηση, παρόλο που έχω συμβουλευτεί κάποιες φορές το forum. Σας ευχαριστώ πολύ για αυτό.

Θα ήθελα λοιπόν να με συμβουλέψει κάποιος πως μπορώ να εξαλείψω τα κενά διαστήματα μέσα σε κελιά. Τα κελιά είναι της μορφής H 4425, 4425 F K, 4425 FK, D 4425 F H, 4425 U-UI, κ.ο.κ

Ευχαριστώ

Spirosgr 04-11-18 12:45

1 Συνημμένο(α)
Λευτέρη, καλώς όρισες στο ms-office.gr

Στο βιβλίο, μια λύση με αντικατάσταση...

Σημείωση:
Μπορούμε αν θέλουμε, να καταγράψουμε τα βήματα, σε μια μακροεντολή.

LefterisA 04-11-18 14:34

Παράθεση:

Αρχική Δημοσίευση από Spirosgr (Μήνυμα 28562)
Λευτέρη, καλώς όρισες στο 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

Ευχαριστώ

Spirosgr 04-11-18 17:55

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")))
Μπορεί να χρειαστεί και επιπλέον ένθετη* (μπορείς να την βάλεις πολύ απλά) αν υπάρχουν αριθμοί 6.123 και πρέπει να γίνουν 06.123000
*IF(LEN(A1)=4;"06."&RIGHT(A1;3)&"000")

kapetang 05-11-18 11:48

1 Συνημμένο(α)
Καλησπέρα

Θα πρότεινα το συντομότερο τύπο: ="06." & RIGHT(A1;LEN(A1)-1)& REPT("0";7-LEN(A1))

LefterisA 05-11-18 16:54

Παράθεση:

Αρχική Δημοσίευση από Spirosgr (Μήνυμα 28566)
Βάλε:
Κώδικας:

=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")))
Μπορεί να χρειαστεί και επιπλέον ένθετη* (μπορείς να την βάλεις πολύ απλά) αν υπάρχουν αριθμοί 6.123 και πρέπει να γίνουν 06.123000
*IF(LEN(A1)=4;"06."&RIGHT(A1;3)&"000")


:yahoo::yahoo::yahoo:

Ευχαριστώ πάρα πολύ. Σόρρυ που σας κούρασα.
Το έκανα με επιτυχία.

Spirosgr 05-11-18 16:56

Καλή συνέχεια Λευτέρη.

Spirosgr 05-11-18 16:58

Μερικές σκέψεις, για τους δύο τύπους που δίνονται ως λύσεις.

Κατ' αρχάς και οι δύο τύποι λειτουργούν σωστά, αν οι «αριθμοί»
είναι κείμενο, είτε με μορφοποίηση 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
που σημαίνει σαφώς, εκτός εμβέλειας.

Με αυτό το σκεπτικό, πρότεινα τον τύπο με τις ένθετες...

Ο χρήστης, έχει σαφή εικόνα του σφάλματος (εκτός εμβέλειας)
και μπορεί να κάνει όποια τροποποίηση θέλει αν θέλει...

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

kapetang 06-11-18 18:37

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, ως απλούστερη και περισσότερο ευέλικτη.

Spirosgr 07-11-18 18:34

Αυτά που διατύπωσα ως σκέψεις, δεν είναι σε καμία περίπτωση, προτροπή,
για να χρησιμοποιηθεί ο τύπος με τις ένθετες, αντί για τον τύπο του Γιώργου...

Είναι η αποτύπωση, του γιατί εγώ επέλεξα τις ένθετες, στο συγκεκριμένο ζητούμενο.
Ο λόγος (να επαναλάβω) είναι, η αποτύπωση σφάλματος #VALUE! vs FALSE,
που σε καμία περίπτωση δεν μπαίνουν στην ίδια ζυγαριά...

Είναι σαν να μου λέει κάποιος, ότι αν έχω στο a1=5 και στο b1=7 τότε
αν βάλω στο c1 =a1=b1, το False που θα πάρω ως αποτέλεσμα, είναι... σφάλμα.
Όχι σφάλμα δεν είναι αλλά είναι Logical Value...
Με ότι σημαίνει αυτό...

Όσο για τους αριθμούς και τα κείμενα...
Φυσικά και τα δεδομένα είναι αριθμοί...
Μόνο που, επειδή το τσέκαρα και με κείμενα,
είπα απλά ότι «δουλεύουν και με κείμενα» αν κανείς θέλει ή έχει τέτοια μορφή...


Η ώρα είναι 04:44.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2