Προς το περιεχόμενο

Μετατροπή αριθμητικών δεδομένων σε παράσταση κειμένου σε Excel


engant

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα φίλε engant!

 

Αντέγραψε τον παρακάτω κώδικα:

>Function gfrv(r As Range) As String
'watch for line wrapping in the next two statements
'there should be two nonblank, noncomment lines
'starting with Const followed by a blank line
Const crep As String = "(([A-Za-z0-9_]+|'[^']+')!)?\$?[A-Z]{1,2}\$?[0-9]+"
Const mrep As String = _
"(([A-Za-z0-9_]+:[A-Za-z0-9_]+|'[^']+:[^']+')\!)|(\$?[A-Z]{1,2}\$?[0-9]+:\$ ?" _
& "[A-Z]{1,2}\$?[0-9]+)"
Dim v As Variant, n As Long
Dim regex As Object, matches As Object, m As Object
Application.Volatile 'modify as needed
gfrv = Mid(r.Formula, 2)
Set regex = CreateObject("vbscript.regexp")
regex.Global = True
regex.Pattern = mrep
Set matches = regex.Execute(gfrv)
If matches.Count > 0 Then Exit Function
regex.Pattern = crep
Set matches = regex.Execute(gfrv)
n = matches.Count - 1
For n = n To 0 Step -1
Set m = matches.Item(n)
v = Evaluate(m.Value)
gfrv = Left(gfrv, m.FirstIndex) & CStr(v) & _
Mid(gfrv, m.FirstIndex + m.Length + 1)
Next n
End Function

Πάτα δεξί κλικ στο φύλλο και "Προβολή κώδικα" (ή Alt+F11).

Στο περιβάλλον της Microsoft Visual Basic πάτα "Insert-->Module".

Θα εμφανισθεί μια νέα λειτουργική μονάδα κώδικα (π.χ. Module1).

Εκεί πρέπει να επικολλήσεις τον κώδικα που μόλις αντέγραψες.

 

Τώρα πιστεύω θα δουλεύουν όλα σωστά και η συνάρτηση gfrv θα εμφανίζεται

στο παράθυρο του Excel "Εισαγωγή συνάρτησης" στην κατηγορία "Συναρτήσεις χρήστη".

Δημοσ.
Καλημέρα φίλε engant!

 

Αντέγραψε τον παρακάτω κώδικα:

>Function gfrv(r As Range) As String
'watch for line wrapping in the next two statements
'there should be two nonblank, noncomment lines
'starting with Const followed by a blank line
Const crep As String = "(([A-Za-z0-9_]+|'[^']+')!)?\$?[A-Z]{1,2}\$?[0-9]+"
Const mrep As String = _
"(([A-Za-z0-9_]+:[A-Za-z0-9_]+|'[^']+:[^']+')\!)|(\$?[A-Z]{1,2}\$?[0-9]+:\$ ?" _
& "[A-Z]{1,2}\$?[0-9]+)"
Dim v As Variant, n As Long
Dim regex As Object, matches As Object, m As Object
Application.Volatile 'modify as needed
gfrv = Mid(r.Formula, 2)
Set regex = CreateObject("vbscript.regexp")
regex.Global = True
regex.Pattern = mrep
Set matches = regex.Execute(gfrv)
If matches.Count > 0 Then Exit Function
regex.Pattern = crep
Set matches = regex.Execute(gfrv)
n = matches.Count - 1
For n = n To 0 Step -1
Set m = matches.Item(n)
v = Evaluate(m.Value)
gfrv = Left(gfrv, m.FirstIndex) & CStr(v) & _
Mid(gfrv, m.FirstIndex + m.Length + 1)
Next n
End Function

Πάτα δεξί κλικ στο φύλλο και "Προβολή κώδικα" (ή Alt+F11).

Στο περιβάλλον της Microsoft Visual Basic πάτα "Insert-->Module".

Θα εμφανισθεί μια νέα λειτουργική μονάδα κώδικα (π.χ. Module1).

Εκεί πρέπει να επικολλήσεις τον κώδικα που μόλις αντέγραψες.

 

Τώρα πιστεύω θα δουλεύουν όλα σωστά και η συνάρτηση gfrv θα εμφανίζεται

στο παράθυρο του Excel "Εισαγωγή συνάρτησης" στην κατηγορία "Συναρτήσεις χρήστη".

 

ναι αλλά δεν εμφανιζει αποτέλεσμα...σαν να έχει λάθος αυτός ο κώδικας...

Δημοσ.

Προφανώς δεν τρέχουν οι μακροεντολές λόγω υψηλού επιπέδου ασφαλείας.

Θέσε αυτό το επίπεδο σε Μεσαίο (Excel2003: "Εργαλεία-->Μακροεντολή-->Ασφάλεια...")

και ενεργοποίησε τις μακροεντολές του βιβλίου κατά το άνοιγμά του.

 

Στο συνημμένο θα βρεις και ένα παράδειγμα.

gfrv.zip

Δημοσ.
Προφανώς δεν τρέχουν οι μακροεντολές λόγω υψηλού επιπέδου ασφαλείας.

Θέσε αυτό το επίπεδο σε Μεσαίο (Excel2003: "Εργαλεία-->Μακροεντολή-->Ασφάλεια...")

και ενεργοποίησε τις μακροεντολές του βιβλίου κατά το άνοιγμά του.

 

Στο συνημμένο θα βρεις και ένα παράδειγμα.

 

σε ευχαριστω...δουλευει οντως

 

 

-----Προστέθηκε 5/2/2009 στις 07 : 25 : 00-----

 

 

δουλευει πάρα πολυ καλά αυτό το module ομως

1. Οταν οι αριθμοι που εισαγουμε ειναι πχ 3.60 μου το βγαζει 3.6...θα ήθελα και τα 2 δεκαδικά να φαίνονται

2. Όταν έχω αριθμο σε μορφή κλάσματος πχ 1/2, μου το βγάζει 0.5...Πως θα γίνει να φαίνονται σαν κλάσμα??

Δημοσ.
σε ευχαριστω...δουλευει οντως

 

 

-----Προστέθηκε 5/2/2009 στις 07 : 25 : 00-----

 

 

δουλευει πάρα πολυ καλά αυτό το module ομως

1. Οταν οι αριθμοι που εισαγουμε ειναι πχ 3.60 μου το βγαζει 3.6...θα ήθελα και τα 2 δεκαδικά να φαίνονται

2. Όταν έχω αριθμο σε μορφή κλάσματος πχ 1/2, μου το βγάζει 0.5...Πως θα γίνει να φαίνονται σαν κλάσμα??

 

Το πρώτο θέμα λύνεται με την αντικατάσταση της γραμμής κώδικα

v = Evaluate(m.Value) (5η γραμμή από το τέλος) με την παρακάτω:

v = Format(Evaluate(m.Value), "#,##0.00")

 

Στο δεύτερο θέμα που θέτεις, sorry αλλά δεν μπορώ να σε παρακολουθήσω.

Αν Α1=1 και Β1 = 2 τότε για τον τύπο "=(Α1/Β1)*1/2" μας επιστρέφει "(1,00/2,00)*1/2".

Το 0,5 που σου προκύπτει;

Δημοσ.
Το πρώτο θέμα λύνεται με την αντικατάσταση της γραμμής κώδικα

v = Evaluate(m.Value) (5η γραμμή από το τέλος) με την παρακάτω:

v = Format(Evaluate(m.Value), "#,##0.00")

 

Στο δεύτερο θέμα που θέτεις, sorry αλλά δεν μπορώ να σε παρακολουθήσω.

Αν Α1=1 και Β1 = 2 τότε για τον τύπο "=(Α1/Β1)*1/2" μας επιστρέφει "(1,00/2,00)*1/2".

Το 0,5 που σου προκύπτει;

 

Σε ευχαριστώ για το πρώτο...όσον αναφορά το 2ο σκέλος εγω που το δοκιμασα με το δικο σου παραδειγμα το 1/2 μου επιστρεφει 0.5 και οχι 1/2....Αν c1 = 1/2 και κανω α1*β1*c1=...Αλλά μάλλον θα πρέπει να το αντικαθιστώ στον τύπο το κελί με το 1/2 για να είμαι εντάξει..ούτως άλλωστε πολύ με βοήθησε ο τύπος...Σας ευχαριστώ όλους για τη πολύτιμη βοήθειά σας...

  • 5 μήνες μετά...
Δημοσ.
Το πρώτο θέμα λύνεται με την αντικατάσταση της γραμμής κώδικα

v = Evaluate(m.Value) (5η γραμμή από το τέλος) με την παρακάτω:

v = Format(Evaluate(m.Value), "#,##0.00")

 

Χρησιμοποιω αυτο για δεκαδικα(2) και δεν μου τα βγαζει οταν πχ βάζω 2 να μου βγάζει 2.00....ξέρει κανείς κάτι??

  • 1 μήνα μετά...
Δημοσ.

Υπάρχει ένα πρόβλημα με τον τυπο αυτόν...όταν το γράφω στο excel που έχω στο pc μου και το ενσωματώνω στο αρχειο, όλα είναι οκ. όταν όμως ανοίξω το ίδιο αρχείο σε κάποιο άλλο pc, είτε με ίδιο excel(πχ 2003) είτε με κάποιο άλλο, τότε βλέπω ότι δεν μου εμφανίζει την παράσταση(στη θέση της βγαίνει #ΟΝΟΜΑ#)...Μήπως μπορεί να βοηθήσιε κάποιος να λυθεί αυτό το ζήτημα??

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...