[ Hỏi ] Tính giá trị của biểu thức trong EXCEL (1 người xem)

  • Thread starter Thread starter kidoto
  • Ngày gửi Ngày gửi
Liên hệ QC

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

kidoto

Thành viên mới
Tham gia
18/12/07
Bài viết
19
Được thích
3
Chào các bạn!

Hôm nay mình mới viết một hàm để tính giá trị biểu thức.

Ví dụ : khi tính dự toán, thường gặp trường hợp nhừ sau:

M1: 2*0,7 x 0,7 x 1,1 x 1,3 M2: 1,4 x 0,7 x 1,1 x 1,3
-> dòng 1, sẽ ra kết quả là: 1.401...

Hàm mình viết như sau:

PHP:
Public Function Tc(str As String) As String
    Application.Volatile (False)
    On Error GoTo Thoat
    Dim i As Integer
    'Dim str As String
    Dim str1 As String
    i = InStr(str, ":")
    If i <= 0 Then Exit Function
    str1 = Right(str, Len(str) - i)
    str1 = Replace(str1, ",", ".")
    str1 = Replace(str1, "x", "*")
    Tc = Application.Evaluate(str1)
    Tc = Round(Tc, 3)
Thoat:
End Function
kết quả hàm ra khá tốt (tạm thời là thế???).

Nhưng mà gặp cái Error này, các bạn xem thử giải quyết mần sao hén:

excel.bmp


Không sum được, ec ec. Chưa tìm ra lỗi, các bạn xem thử hén^^. Thanks all.
 
Nhìn thấy hàm TC của Bạn trả về kiểu String thì tổng làm sao được chứ? Bạn thử thay nó thành Double xem sao?
 
Hơ hơ.
Cảm ơn bác MinhCong.

Ngoài ra cái hàm trên mình con sai một lỗi, dư cái dòng " Dim str As String" , thanks a lot.
 
Mọi người giúp em với ạ. em tính mà ô kết quả không hiện gì ạ.
 

File đính kèm

Mọi người giúp em với ạ. em tính mà ô kết quả không hiện gì ạ.
Nó do cái dòng này bạn ạ
Mã:
'.............................................................'
i = InStr(str, ":")
    If i <= 0 Then Exit Function
..............................................................
PHP:
Public Function Tc(str As String) As Double
    Dim i As Integer, str1 As String
    str = Application.Trim(Right(str, Len(str) - InStr(str, ":")))
    str = Replace(str, "x", "*")
    For i = 1 To Len(str)
        Select Case Asc(Mid(str, i, 1))
            Case 40 To 57, 94
                str1 = str1 & Mid(str, i, 1)
        End Select
    Next i
    str1 = Replace(str1, ",", ".")
    str1 = Replace(str1, "/*", "*")
    str1 = Replace(str1, "/+", "+")
    str1 = Replace(str1, "/-", "-")
    str1 = Replace(str1, "//", "/")
    Tc = Application.Evaluate(str1)
    Tc = Round(Tc, 3)
End Function
 

File đính kèm

Lần chỉnh sửa cuối:
Mọi người giúp em với ạ. em tính mà ô kết quả không hiện gì ạ.
Bạn bấm ALT+F11 -> Insert Module và copy đoạn code sau của anh NDU dán vào:
Function KQ(Cell As String) As Double
Dim Temp1 As String
With CreateObject("VBScript.RegExp")
.Global = True
Temp1 = Replace(Cell, "[", "(")
Temp1 = Replace(Temp1, "]", ")")
Temp1 = Replace(Temp1, "{", "(")
Temp1 = Replace(Temp1, "}", ")")
Temp1 = Replace(Temp1, "x", "*")
Temp1 = Replace(Temp1, ":", "/")
.Pattern = "[^0-9+.*/:()-]"
KQ = Evaluate(.Replace(Temp1, ""))
End With
End Function
 

File đính kèm

Bạn bấm ALT+F11 -> Insert Module và copy đoạn code sau của anh NDU dán vào:
Function KQ(Cell As String) As Double
Dim Temp1 As String
With CreateObject("VBScript.RegExp")
.Global = True
Temp1 = Replace(Cell, "[", "(")
Temp1 = Replace(Temp1, "]", ")")
Temp1 = Replace(Temp1, "{", "(")
Temp1 = Replace(Temp1, "}", ")")
Temp1 = Replace(Temp1, "x", "*")
Temp1 = Replace(Temp1, ":", "/")
.Pattern = "[^0-9+.*/:()-]"
KQ = Evaluate(.Replace(Temp1, ""))
End With
End Function
Anh ác thiệt. Cho file mà lưu dạng .xlsx :p:p:p
Mà sao cái chuỗi: 6+9+9+9*9*9+5,3 lại bằng 806,00 anh ạ
 
Anh ác thiệt. Cho file mà lưu dạng .xlsx :p:p:p
Mà sao cái chuỗi: 6+9+9+9*9*9+5,3 lại bằng 806,00 anh ạ
Thêm 1 dòng trong code nữa nhé!
Function KQ(Cell As String) As Double
Dim Temp1 As String
With CreateObject("VBScript.RegExp")
.Global = True
Temp1 = Replace(Cell, "[", "(")
Temp1 = Replace(Temp1, "]", ")")
Temp1 = Replace(Temp1, "{", "(")
Temp1 = Replace(Temp1, "}", ")")
Temp1 = Replace(Temp1, "x", "*")
Temp1 = Replace(Temp1, ":", "/")
Temp1 = Replace(Temp1, ",", ".")
.Pattern = "[^0-9+.*/:()-]"
KQ = Evaluate(.Replace(Temp1, ""))
End With
End Function
 

File đính kèm

ok, em đã làm được rùi. cảm ơn mọi người ạ.
 
Web KT

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

Back
Top Bottom