Chuyển công thức thành chuỗi biểu thức, biến chuỗi biểu thức thành giá trị

Liên hệ QC

thanhtrg

Thành viên hoạt động
Tham gia
14/7/12
Bài viết
179
Được thích
105
Bạn muốn diễn giải công thức ? Bạn muốn tính giá trị của một chuỗi biểu thức có sẵn ? Hãy sử dụng hàm FX với đoạn mã vô cùng ngắn .
Lưu ý quan trọng :
Để hàm FX làm việc chính xác thì trước hết bạn phải vào Menu Tool-Options-International, tắt checkbox Use system separators

  • Nếu chọn Decimal separator = “.” thì Thousands separator phải chọn là “,” và dấu ngăn các tham số (List separator) trong công thức/chuỗi biểu thức phải chọn là “,
  • Nếu chọn Decimal separator = “,” thì Thousands separator phải chọn là “.” và dấu ngăn các tham số (List separator) trong công thức/chuỗi biểu thức phải chọn là “;
Muốn diễn giải công thức, gõ cú pháp sau : = FX(CELL,1)
Muốn tính giá trị của chuỗi biểu thức, gõ cú pháp sau : = FX(CELL)
Trong đó, CELL là địa chỉ ô chứa công thức hoặc chuỗi biểu thức .
 

File đính kèm

  • FX.xls
    33.5 KB · Đọc: 514
  • FX.xla
    17.5 KB · Đọc: 367
Lần chỉnh sửa cuối:
Bạn ơi, thế có cách nào tính giá trị biểu thức có cả số và chữ không? Kiểu như "2 cái * 3 kg" ý! Có thì chia sẻ mình với nhé! Thank bạn nha!
 
Upvote 0
Public Function diengiai(rngData As Range)
Dim strText As String, strText2 As String
Dim i As Long, j As Long, dem As Long
Dim subText() As String, dau() As String
Dim Res As Double
strText = rngData.Formula
For i = 1 To Len(strText)
Select Case Mid(strText, i, 1)
Case "+", "-", "*", "/", "^"
ReDim Preserve dau(j)
dau(j) = Mid(strText, i, 1)
j = j + 1
End Select
Next i
strText = Replace(strText, "=", "")
strText = Replace(strText, "+", "@")
strText = Replace(strText, "-", "@")
strText = Replace(strText, "*", "@")
strText = Replace(strText, "/", "@")
strText = Replace(strText, "", "@")
strText = Replace(strText, "^", "@")
strText = Trim(strText)
subText = Split(strText, "@")
For i = 0 To UBound(subText)
On Error Resume Next
If Not IsNumeric(subText(i)) Then
Err.Clear
Res = Application.WorksheetFunction.Find("(", subText(i))
If Err.Number = 0 Then
dem = 0
For j = 1 To Len(subText(i))
If Mid(subText(i), j, 1) = "(" Then dem = dem + 1
Next j
subText(i) = Replace(subText(i), "(", "")
If IsNumeric(subText(i)) Then
subText(i) = String(dem, "(") & subText(i)
Else
subText(i) = String(dem, "(") & Range(subText(i)).Value
End If
End If
Err.Clear
Res = Application.WorksheetFunction.Find(")", subText(i))
If Err.Number = 0 Then
dem = 0
For j = 1 To Len(subText(i))
If Mid(subText(i), j, 1) = ")" Then dem = dem + 1
Next j
subText(i) = Replace(subText(i), ")", "")
If IsNumeric(subText(i)) Then
'
subText(i) = Round(subText(i), 3) & String(dem, ")")
Else
subText(i) = Range(subText(i)).Value & String(dem, ")")
End If
End If
subText(i) = Round(Range(subText(i)).Value, 3)
End If
Next i
ReDim Preserve dau(UBound(subText))
For i = 0 To UBound(subText)
strText2 = strText2 & subText(i) & dau(i)
Next i
diengiai = strText2
End Function
 
Upvote 0
Bạn muốn diễn giải công thức ? Bạn muốn tính giá trị của một chuỗi biểu thức có sẵn ? Hãy sử dụng hàm FX với đoạn mã vô cùng ngắn .
Lưu ý quan trọng :
Để hàm FX làm việc chính xác thì trước hết bạn phải vào Menu Tool-Options-International, tắt checkbox Use system separators

  • Nếu chọn Decimal separator = “.” thì Thousands separator phải chọn là “,” và dấu ngăn các tham số (List separator) trong công thức/chuỗi biểu thức phải chọn là “,
  • Nếu chọn Decimal separator = “,” thì Thousands separator phải chọn là “.” và dấu ngăn các tham số (List separator) trong công thức/chuỗi biểu thức phải chọn là “;
Muốn diễn giải công thức, gõ cú pháp sau : = FX(CELL,1)
Muốn tính giá trị của chuỗi biểu thức, gõ cú pháp sau : = FX(CELL)
Trong đó, CELL là địa chỉ ô chứa công thức hoặc chuỗi biểu thức .

- - -

"ThanhTrg" ơi
Bạn làm ơn, chỉ rõ: "Menu Tool-Options-International" (bên↑trên) ←
Là: ".. Vào đâu / Phần mềm nào .." (Mình tìm hoài không ra) ?
Tks!
 
Upvote 0
Bạn muốn diễn giải công thức ? Bạn muốn tính giá trị của một chuỗi biểu thức có sẵn ? Hãy sử dụng hàm FX với đoạn mã vô cùng ngắn .
Lưu ý quan trọng :
Để hàm FX làm việc chính xác thì trước hết bạn phải vào Menu Tool-Options-International, tắt checkbox Use system separators

  • Nếu chọn Decimal separator = “.” thì Thousands separator phải chọn là “,” và dấu ngăn các tham số (List separator) trong công thức/chuỗi biểu thức phải chọn là “,
  • Nếu chọn Decimal separator = “,” thì Thousands separator phải chọn là “.” và dấu ngăn các tham số (List separator) trong công thức/chuỗi biểu thức phải chọn là “;
Muốn diễn giải công thức, gõ cú pháp sau : = FX(CELL,1)
Muốn tính giá trị của chuỗi biểu thức, gõ cú pháp sau : = FX(CELL)
Trong đó, CELL là địa chỉ ô chứa công thức hoặc chuỗi biểu thức .
Hàm của bác nó bị giới hạn số lượng dữ liệu ở trên ô cần diễn giải.
1. VD cái ô biểu thức của em có dữ liệu như này: (4.000+0.965+3.550+3.550+0.200*9+4.000+0.200+4.000+3.550+0.200+4.000+3.550+0.200+4.000+0.200+4.000+3.550+0.200+0.200+4.000+4.000+3.700+3.552+3.552+3.550+0.200+0.200+0.200+0.200+4.000+3.550+4.000+3.550+4.000+3.550+4.000+3.550+0.200+0.200+0.200+0.200+3.500+3.500+3.500+0.200+0.200+4.000+3.550+4.000+3.550+0.200+0.200+3.500+0.200+2.600+4.000+0.200+0.950+1.460+1.660+1.270+1.460+2.600+0.200+4.000+0.200+0.200+4.000+0.200+0.200+0.200+4.000+4.000+0.200+0.200+4.000+0.200+0.200+0.200+0.200+4.000+4.000+0.200+0.200+4.000+0.200+4.000+0.200+4.000+0.200+1.900+1.140+0.337+0.450+0.450+4.000+0.200+4.000+0.200+0.200+4.000+0.200+4.000+4.000+0.200+4.000+0.200+0.200+4.000+0.200+0.200+4.000+0.200+4.000+2.355+4.330+2.165+0.380+0.381+0.200+0.200+1.500+2.000+4.021+1.500+2.000+3.000+0.200*8+0.55*64+1*17.000) ==> nó trả kết quả #Value
2. VD Em rút gọn dữ liệu xuống còn: (4.000+0.965+3.550+3.550+0.200*9+4.000+0.200+4.000+3.550+0.200+4.000+3.550+0.200+4.000+0.200+4.000+3.550+0.200+0.200+4.000+4.000+3.700+3.552+3.552+3.550+0.200+0.200+0.200+0.200+4.000+3.550+4.000+3.550+4.000+3.550+4.000+3.550+0.200+0.200+0.200+0.200+3.500) ==> hàm trả được kết quả 103,369 (đang hơi khác về định dạng dấu thập phân là "." và dấu ","
 
Upvote 0
Hàm Evaluate(string) giới hạn số lượng ký tự của tham số string <=255 ký tự.
Nếu len(string) > 255 thì xảy ra lỗi #Value .
 
Upvote 0
Hàm Evaluate(string) giới hạn số lượng ký tự của tham số string <=255 ký tự.
Nếu len(string) > 255 thì xảy ra lỗi #Value .
Anh ơi, trường hợp của em có sửa code đc k. E cũng vừa nhắn riêng vs bác, cũng có lập 1 topic về vđ này. Ở topic e up file DValue.xla lên,nhờ bác xem giúp em đc k ạ
 
Upvote 0
Web KT
Back
Top Bottom