Có hàm nào trong VBA tính được giá trị của 1 biểu thức không?

Liên hệ QC

bkxd98

Thành viên mới
Tham gia
2/8/06
Bài viết
15
Được thích
26
VD : có một biểu thức "6/3+2*(4-1)"
Xin hỏi các bác có hàm nào của VBA tính được giá trị của biểu thức trên không ?
Tôi đang viết 1 function, ban đầu có ý định gán 1 cell trong excel có công thức (formula) như trên rồi lấy giá trị tính (value) của nó, nhưng dòng lệch gán 1 biểu thức cho 1 cell không có tác dụng trong function.
Thanks.
 
Xin chào mọi người, mình làm xây dựng nên phép toán này rất hay dùng, mình thường dùng Evaluate luôn (do ko biết dùng VBA). Có một vấn đề trong quá trình sử dụng hàm là , nó rất mất ổn định, lâu lâu kết quả tính lại nhảy Value, mỗi lần như thế mình lại phải đặt lại name và kéo lại cột tính đó, các pạn sử dụng có bị như thế không, và cách khắc phục thế nào, mong mọi người chỉ giáo. Mình cảm ơn!
Cái nào cũng có khó khăn cả, bạn cố gắng vượt qua khó khăn đó, đặt Name cho Evaluate hợp lý (cố định tương đối để khi di chuyển công thức vẫn trả ra đúng kết quả), hoặc tìm hiểu về VBA. Một khi bạn biết thêm về VBA, nó giúp bạn giải quyết rất nhiều công việc mà bạn phải mất thời gian xử lý. Coppy code đưa vào của sổ VBA: Nhấn Alt+F11 (hoặc chuột phải vào tên sheet chọn View code), bên trái có cột thư mục tên sheet, nhấp chuột phải lên tên sheet nào đó và chọn Insert, chọn Module và coppy đoạn code sau (tôi sửa lấy phần đơn giản hàm tự tạo từ bài #17) dán vào của sổ của Module1 vừa tạo:
Mã:
 Function LamToan(BieuThuc As String) As Double     If Trim(BieuThuc) = "" Then Exit Function     LamToan = Application.Evaluate("=" & BieuThuc) End Function
Khi sử dụng VBA thì bạn phải mở Marco (Enable Marco) và Save file có đuôi mở rộng là .xls, hoặc .xlsm, ... Bây giờ bạn muốn tính biểu thức ô nào thì gõ hàm tự tạo: =LamToan(ô chứa biểu thức).
 

File đính kèm

  • Evaluate.xls
    30 KB · Đọc: 41
Upvote 0
Bạn xem có đúng yêu cầu không
 

File đính kèm

  • BThuc.xls
    22.5 KB · Đọc: 39
Upvote 0
Cảm ơn các pạn rất nhiều. Phải cố gắng cho được bằng một chút với anh em. Thanks all nha! }}}}} ngại quá, hì
 
Lần chỉnh sửa cuối:
Upvote 0
Thấy cái này cũng hay, anh đã tìm được cách xác định dấu ngàn, thập phân trong regional and language Options:
Mã:
ngan = Application.ThousandsSeparator
tphan = Application.DecimalSeparator
Tuy nhiên, trong VBA nó không chấp nhận dấu ngàn, thập phân như thế mà dấu ngàn là dấu phẩy và dấu thập phân là dấu chấm. Do đó, phải thay thế dấu ngàn, thập phân về dạng chuẩn của VBA (tốt nhất là loại bỏ dấu ngàn). Ví dụ 1.234,5*3 phải chuyển chuỗi 1.234,5 thành 1234.5 VBA mới hiểu và tính toán.
Một cái hay nữa là không cần phải dùng select case như em làm, mà bản thân Application.Evaluate(Temp) nó tự xác định biểu thức nếu nhập số, toán tử, dấu ngoặc
đúng bài bản là nó tính ngay, còn nhập tào lao là nó báo lỗi #VALUE! nên hàm viết lại rất gọn:
Mã:
Function LamToan(BieuThuc As String) As Double
Dim ngan As String, tphan As String, temp As String
If Trim(BieuThuc) = "" Then Exit Function
ngan = Application.ThousandsSeparator
tphan = Application.DecimalSeparator
BieuThuc = Replace(BieuThuc, ngan, "")
BieuThuc = Replace(BieuThuc, tphan, ".")
LamToan = Application.Evaluate("=" & BieuThuc)
End Function

Hàm của bác rất hay, tuy nhiên chỉ tính toán được khi Len(Bieuthuc) <= 255, bác xem có cách này tính được khi >255 không?
Thanks các bác
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom