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ị (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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

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

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

Back
Top Bottom