Jump to content

1 Screenshot

About This File

Υπολογισμός μαθηματικών εκφράσεων στο Excel . Οι όποιες μαθηματικές εκφράσεις γράφονται απλά και κατανοητά , χωρίς να προηγείται το "=" για να δηλώσουμε ότι πρόκειται για τύπο που πρέπει να υπολογιστεί.

 

Στο φύλλο εργασίας υπάρχει μια νέα συνάρτηση η evalmath η οποία αναλαμβάνει να υπολογίσει απλές και σύνθετες μαθηματικές εκφράσεις που περιέχονται σε κάποιο κελλί . Όσοι/Όσες προτιμούν να χρησιμοποιούν το χ αντί για το * στον πολλαπλασιασμό , δεν θα έχουν κανένα πρόβλημα, υποστηρίζεται από τη συνάρτηση .




User Feedback

Recommended Comments

Γιώργο καλημέρα

"Math Evaluation" = a blast from the past!!! Ευχαριστούμε για την επαναφορά

 

να σημειώσω ότι σε Excel 2010 χρειάστηκε αλλαγή σε public της function

alt+f11 (για άνοιγμα VBA editor)

Function EvalMath(xc As String) As Double --> Public Function EvalMath(xc As String) As Double

 

προτείνω α)

If xc <> "" Then --> If Trim(xc) <> "" Then

έτσι προλαβαίνουμε την περίπτωση xc=" "

 

β) για όποιον έχει περιττά δεδομένα όπως μονάδες

προσθήκη της μπλε γραμμής:

For I = 1 To lt

If Mid$(xc, I, 1) = "×" Or Mid$(xc, I, 1) = "X" Or Mid$(xc, I, 1) = "x" Or Mid$(xc, I, 1) = "χ" Then

Mid$(xc, I, 1) = "*"

End If

If Not InStr("0123456789+-*/.,()^", Mid$(xc, I, 1)) > 0 Then Mid$(xc, I, 1) = " "

Next

 

αν και εδώ θέλει προσοχή γιατί αν πχ έχετε "8+5 χιλιάδες" θα αλλάξει το "χ" με "*" και προκύπτει ΛΑΘΟΣ!!! οπότε πρέπει να διαλέξετε...

 

γ) τολμώ να προτείνω μια παραλαγή της EvalMath, ας την πούμε EvalMath2. Την προτείνω αρχικά γιατί χρησιμοποιώντας συναρτήσεις της VBA είναι πολύ πιο απλή προγραμματιστικά, και πιο εύκολη για αλλαγές... κατά τα άλλα νομίζω ότι δουλεύουν το ίδιο. Με τη προσθήκη της επιλεκτίκής αφαίρεσης δεδομένων που δε συμμετέχουν σε πράξεις... ολοκληρωνόμαστε νομίζω.

 

Public Function EvalMath2(xc As String, Optional RemoveStrings As Boolean = False) As Double

Dim n As Double, lt As Long, I As Long

 

lt = Len(Trim(xc))

If lt > 0 Then

If RemoveStrings = False Then

xc = LCase(xc)

xc = Replace(xc, "χ", "*")

xc = Replace(xc, "x", "*")

Else

For I = 1 To lt

If Not InStr("0123456789+-*/.,()^", Mid$(xc, I, 1)) > 0 Then Mid$(xc, I, 1) = " "

Next

End If

n = Evaluate("=" & xc)

Else

n = 0

End If

EvalMath2 = n

 

End Function

 

 

αν / όταν κάνετε copy-paste στη VBA διορθώστε τα "χ" που ίσως περαστούν λάθος

Προσέξτε καλά την replace, είναι φοβερή διευκόλυνση...

Share this comment


Link to comment
Share on other sites

Απόστολε ευπρόσδεκτες οι αλλαγές και οι προτάσεις σου .

 

Δουλεύω σε Excel 2003 . Δεν μου δόθηκε η ευκαιρία να το δοκιμάσω σε Office 2010.

 

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

Share this comment


Link to comment
Share on other sites

να προσθέσω λίγα ακόμη χρήσιμα regex:

xc = Replace(xc, "π", "pi()")
xc = Replace(xc, "[", "(")
xc = Replace(xc, "]", ")")
xc = Replace(xc, "{", "(")
xc = Replace(xc, "}", ")")

 

Επίσης το μείον της VBA είναι ότι αναγνωρίζει μόνο την τελεία ως δεκαδική υποδιαστολή

 

Μπράβο Γιώργο που το ανέβασες. Είναι πολύ χρήσιμο εργαλείο ιδίως σε αυτούς που κάνουν προμετρήσεις σε word και μετά τα "χτυπάνε" σε κομπιουτεράκι...

  • Upvote 3

Share this comment


Link to comment
Share on other sites

Είναι πολύ χρήσιμο εργαλείο ιδίως σε αυτούς που κάνουν προμετρήσεις σε word και μετά τα "χτυπάνε" σε κομπιουτεράκι...

 

Κάπως έτσι ξεκίνησε η ιστορία... Το ερώτημα που αρχικά "έπεσε" στο τραπέζι ήταν να μπορεί το Excel να αναγνωρίζει αριθμητικές παραστάσεις ακόμη και όταν ξεχνάμε το "=" στην αρχή τους . Μετά "γλυκάθηκα" και με τις παραινέσεις συναδέλφων ξεκίνησα το "ψάξιμο" ώστε το σύμβολο για τον πολλαπλασιασμό να το καταλαβαίνει ακόμη και όταν γράφεται με x (είτε μικρό , είτε κεφαλαίο) ανεξάρτητα αν γράφουμε με πληκτρολόγιο στα ελληνικά ή λατινικά.

Share this comment


Link to comment
Share on other sites

Επίσης το μείον της VBA είναι ότι αναγνωρίζει μόνο την τελεία ως δεκαδική υποδιαστολή

 

προσθέτουμε μερικά IF και μερικά Replace() ακόμα, και για καλύτερη χρήση και ένα Optional στο κάλεσμα... και ιδού:

Public Function EvalMath2(xc As String, Optional FixRegional As Boolean = False) As Double
Dim n As Double, lt As Long, I As Long
lt = Len(Trim(xc))
If lt > 0 Then
xc = LCase(xc)
xc = Replace(xc, "χ", "*")
xc = Replace(xc, "x", "*")
xc = Replace(xc, "π", "pi()")
xc = Replace(xc, "[", "(")
xc = Replace(xc, "]", ")")
xc = Replace(xc, "{", "(")
xc = Replace(xc, "}", ")")
   If FixRegional Then
	' remove Thousands separator
	xc = Replace(xc, Application.International(xlThousandsSeparator), "")   ' xc = Replace(xc, ".", "")   ' or
	' replace Decimal separator from WindowsDeafult to VBA Default "."
	xc = Replace(xc, Application.International(xlDecimalSeparator), ".")	' xc = Replace(xc, ",", ".")  ' or
End If

n = Evaluate("=" + xc)
Else
 n = 0
End If
EvalMath2 = n
End Function

 

(σημείωση: το "β) για όποιον έχει περιττά δεδομένα όπως μονάδες" δεν μπλέκει την κατάσταση χωρίς λόγο, οπότε το αφαίρεσα.)

  • Upvote 2

Share this comment


Link to comment
Share on other sites

Επανέρχομαι με κάτι πολύ παλιό, πολύ κρυμένο... Δεν υπάρχει λόγος να χρησιμοποιούμαι VBA για evaluate! Γίνεται με συνάρτηση του Excel κρυμμένη από το Excel, αλλά υπαρκτή στο RefersTo στα Named Ranges... κουφάθηκα όταν το είδα και διαπίστωσα ότι δουλεύει...

λεπτομέρειες και εδώ.

Share this comment


Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.