Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Μορφοποίηση] Εισαγωγή αριθμού σε κελί (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/1223-eisagogi-arithmoi-se-keli.html)

φωτης 25-06-11 00:23

Εισαγωγή αριθμού σε κελί
 
Καλησπέρα στην παρέα!

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

π.χ. Έστω ο αριθμός 145,12 Να εφαρμόσω μορφοποίηση έτσι ώστε εισάγωντας "14512" στο κελί να καταχωρηθεί "145,12"
Στο κελί καταχωρούνται 6φιοι αριθμοί (+2 για τα δεκαδικά), οπότε θα ήθελα να αποφύγω ένα αποτέλεσμα της μορφής:
"000145,12"

Ευχαριστώ για τον χρόνο σας.

gr8styl 25-06-11 02:12

1 Συνημμένο(α)
Φίλε Φώτη,
δες στο συνημμένο 3 διαφορετικούς τρόπους για να πετύχεις το ζητούμενο.

Πες μας τι έκανες και ποιόν από τους 3 επέλεξες.

Θανάσης

φωτης 25-06-11 17:17

Φίλε Θανάση σε ευχαριστώ για την άμεση απάντηση!

Ο πρώτος τρόπος με εξυπηρετεί αλλά θα ήθελα να εμφανίζεται και το διαχωριστικό για τις χιλιάδες.
π.χ. εισαγωγή: "12345678" ---> μορφοποίηση: "123.456,78"

Σε ευχαριστώ για τον χρόνο σου!

φωτης 25-06-11 17:32

Παράθεση:

Αρχική Δημοσίευση από φωτης (Μήνυμα 7018)
Φίλε Θανάση σε ευχαριστώ για την άμεση απάντηση!

Ο πρώτος τρόπος με εξυπηρετεί αλλά θα ήθελα να εμφανίζεται και το διαχωριστικό για τις χιλιάδες.
π.χ. εισαγωγή: "12345678" ---> μορφοποίηση: "123.456,78"

Σε ευχαριστώ για τον χρόνο σου!

Δοκίμασα αυτήν την μορφοποίηση: #"."##0","00
Το πρόβλημα που έχει είναι ότι όταν γίνεται εισαγωγή ενός αριθμού με λιγότερα από 4 ψηφία (μετά την υποδιαστολή) π.χ. "985,16" εμφανίζει στο κελί ".985,16"

φωτης 25-06-11 17:38

Επειδή θέλω η μορφοποίηση να γίνεται στο κελί που γίνεται η εισαγωγή του αριθμού (και όχι σε άλλο κελί η εισαγωγή και σε άλλο κελί η μορφοποίηση), έχω την εντύπωση οτι μπορεί να γίνει μόνο με VBA.

φωτης 25-06-11 18:10

Παράθεση:

Αρχική Δημοσίευση από φωτης (Μήνυμα 7020)
Επειδή θέλω η μορφοποίηση να γίνεται στο κελί που γίνεται η εισαγωγή του αριθμού (και όχι σε άλλο κελί η εισαγωγή και σε άλλο κελί η μορφοποίηση), έχω την εντύπωση οτι μπορεί να γίνει μόνο με VBA.

Κάπως έτσι:

If Cell <1000 then Cellformat = "##0,00"
else Cellformat = "###.##0,00"

και θα πρέπει να εφαρμόζεται σε μια περιοχή κελιών π.χ. Α1:A29

gr8styl 25-06-11 19:08

Φίλε Φώτη,
θα συμφωνήσω ότι μόνο με VBA μπορείς να επιτύχεις το να είναι διαφορετικό το τι καταχωρεί ο χρήστης από το τι τελικά καταχωρήται στο κελί.

Εγώ θα το έκανα έτσι για την περιοχή A1:A29:
Κώδικας:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A29")) Is Nothing Then
    If (Target > 0 And Target.Value = Int(Target.Value)) Then
        Target.NumberFormat = "#,##0.00"
        Target.Value = Target.Value / 100
    End If
End If
End Sub

Κάνεις απλά επικόλληση στον κώδικα του φύλλου.

Θανάσης

kapetang 25-06-11 19:52

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

Φώτη, αν κατάλαβα καλά θέλεις να καταχωρείς ακέραιους αριθμούς (πχ 12345678, 56, 1) αλλά να αποθηκεύεται το πηλίκο τους με το εκατό (πχ 123456,78 0,56 0,01).
Θέλεις επίσης στη μορφοποίηση να εμφανίζεται και το διαχωριστικό των χιλιάδων.
Στο αρχείο που επισυνάπτω (είναι το αρχείο με τις λύσεις που πρότεινε ο Θανάσης) έχω διαμορφώσει τη στήλη K ώστε να έχει αυτές τις ιδιότητες.

Φιλικά/Γιώργος

Tasos 25-06-11 21:27

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

Μπορούμε ακόμα να ρυθμίσουμε προγραμματιστικά (με VBA) την Αυτόματη Εισαγωγή Υποδιαστολής και τις θέσεις της πριν από το τέλος του αριθμού όπως μας υπέδειξε ο Γιώργος.

Έτσι, στον κώδικα του βιβλίου έχουμε:

Κώδικας:

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    With Application
    .FixedDecimalPlaces = GetSetting("xlApp", "Settings", "FixedDecimalPlaces", 2)
    .FixedDecimal = GetSetting("xlApp", "Settings", "FixedDecimal", False)
    End With
End Sub

Private Sub Workbook_Open()
    With Application
        SaveSetting "xlApp", "Settings", "FixedDecimalPlaces", .FixedDecimalPlaces
        SaveSetting "xlApp", "Settings", "FixedDecimal", .FixedDecimal
        If .FixedDecimalPlaces <> 2 Then .FixedDecimalPlaces = 2
    End With
End Sub

και στον κώδικα του φύλλου:

Κώδικας:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.FixedDecimal = Not Intersect(Target, Range("A1:A29")) Is Nothing
End Sub

Θανάση και Γιώργο οι λύσεις σας είναι όπως πάντα μοναδικές!:045:

Να είστε πάντα καλά!

Φιλικά

Τάσος

φωτης 26-06-11 00:20

Καλησπέρα!

Φίλε Γιώργο η λύση σου είναι τόσο απλή που κάνει την αμάθεια μου ακόμη πιο μεγάλη.:blush:

Όσο για τις λύσεις σε VBA από τον Θανάση και τον Τάσο.... :omg2:

Σας ευχαριστώ όλους για την άμεση λύση του προβλήματος και για τις υποδείξεις σας.

ΥΓ Δούλεψαν όλες ρολόϊ.:045:

gr8styl 26-06-11 02:25

Παράθεση:

Αρχική Δημοσίευση από kapetang (Μήνυμα 7023)
...
Στο αρχείο που επισυνάπτω (είναι το αρχείο με τις λύσεις που πρότεινε ο Θανάσης) έχω διαμορφώσει τη στήλη K ώστε να έχει αυτές τις ιδιότητες.
Φιλικά/Γιώργος

Εγώ απλά θέλω να πω ένα ευχαριστώ στο Γιώργο έμαθα κάτι που δεν ήξερα για το Excel Εργαλεία/Επιλογές/Επεξεργασία και ορισμό Σταθερών δεκαδικών. :respect:
Το μόνο μειονέκτημα σε σχέση με το συγκεκριμένο ερώτημα είναι ότι αφορά ολόκληρο το φύλλο και όχι περιορισμένη περιοχή.
Θα έλεγα λοιπόν ότι ο κανόνας "Πάντα μαθαίνουμε... Κανείς δεν τα γνωρίζει όλα" επιβεβαιώνεται για μια ακόμα φορά.
Ευχαριστώ τον Φώτη για το ερώτημα του αλλά και τον Γιώργο για την μετάδοση της γνώσης.

Θανάσης

kapetang 26-06-11 11:28

Καλημέρα στην παρέα

Η ρύθμιση των «σταθερών δεκαδικών» είναι βολική, αλλά, αν δεν προσέξουμε, μπορεί να οδηγήσει σε λάθη.
Τα βασικά που πρέπει να έχουμε υπόψη μας είναι:
1. Η ρύθμιση αφορά ολόκληρο το βιβλίο εργασίας και αποθηκεύεται μαζί του.
Αυτό σημαίνει ότι, αν πληκτρολογήσουμε έναν ακέραιο σε οποιοδήποτε κελί του βιβλίου, στο κελί θα αποθηκευτεί το πηλίκο του ακέραιου με το 100.
Αντιθέτως, αν πληκτρολογήσουμε ένα δεκαδικό, ο δεκαδικός δε θα αλλάξει και θα αποθηκευτεί όπως τον πληκτρολογήσαμε (δε θα διαιρεθεί με το 100).
2. Αν αφαιρέσουμε τη ρύθμιση των «σταθερών δεκαδικών», ότι έχει αποθηκευτεί στα κελιά δε θα αλλάξει. Απλά από το σημείο αυτό το excel θα συμπεριφέρεται φυσιολογικά (δε θα διαιρεί τους ακέραιους με το 100).
Κατά τη γνώμη μου, για να αποφύγουμε τα λάθη, μετά από την καταχώρηση ενός συνόλου ακεραίων ,που θέλουμε να διαιρούνται αυτόματα με το 100, θα πρέπει να αφαιρείται η ρύθμιση των «σταθερών δεκαδικών» για να επανέρχεται το excel στη συμπεριφορά με την οποία είμαστε εξοικειωμένοι.
Φυσικά, αν θέλουμε να καταχωρήσουμε νέα ομάδα ακεραίων, δεν μας εμποδίζει τίποτα να επαναφέρουμε τη ρύθμιση.

Φιλικά/Γιώργος
ΥΓ Σας ευχαριστώ όλους για τα καλά λόγια

Tasos 26-06-11 12:25

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

Επίσης με το συμβάν Worksheet_SelectionChange() μπορούμε να καθορίσουμε την/τις περιοχές
όπου θα επιτρέπεται η αυτόματη Εισαγωγή Υποδιαστολής.

Για παράδειγμα:
Κώδικας:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'    If Target.Count > 1 Then Exit Sub
'    If Target.Row > 20 Or Target.Row < 5 Then Exit Sub

    Select Case Target.Column
    Case 1, 2, 3, 4
        Application.FixedDecimal = True
    Case Else
        Application.FixedDecimal = False
    End Select
End Sub

Φιλικά

Τάσος

kapetang 26-06-11 17:16

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

Τάσο μου, συμφωνώ ότι με τον κώδικα έχουμε καλύτερο έλεγχο στη ρύθμιση «Αυτόματη Εισαγωγή Υποδιαστολής» (σταθερών δεκαδικών), οπότε περιορίζουμε και τον κίνδυνο λαθών.
Στο προηγούμενο μήνυμά μου έγραφα ότι «Η ρύθμιση αφορά ολόκληρο το βιβλίο εργασίας». Το σωστότερο είναι ότι η ρύθμιση είναι επιπέδου εφαρμογής και συνεπώς, όταν γίνεται χειροκίνητα, υπάρχει περίπτωση (όταν κλείσουμε το excel) να είναι ενεργοποιημένη οπότε, αν μετά ανοίξουμε ένα βιβλίο εργασίας ή δημιουργήσουμε νέο, μπορεί να μη προσέξουμε ότι οι ακέραιοι που πληκτρολογούμε διαιρούνται με το 100.
Στο αρχείο που επισυνάπτω προσπάθησα να δοκιμάσω τον κώδικα του Θανάση και του Τάσου.
Το αποτέλεσμα παρουσιάζει ενδιαφέρον και ομολογώ ότι δεν το περίμενα.

Φιλικά/Γιώργος


Η ώρα είναι 11:32.

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


Search Engine Optimization by vBSEO 3.3.2