Nhờ giúp viết code tính toán

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

ncq2003

Thành viên chính thức
Tham gia
2/4/09
Bài viết
83
Được thích
34
Nhờ các bạn viết giùm code Visua basic để tính khối lượng trong cột B.
Qui ước chỉ tính từ sau dấu ":" trở về sau; Nếu trong biểu thức có text thì loại bỏ text. Nếu có khoảng trắng thì loại bỏ khoảng trắng.
[TABLE="width: 501"]
[TR]
[TD]Cộng là (+)[/TD]
[/TR]
[TR]
[TD]Trừ (-)[/TD]
[/TR]
[TR]
[TD]nhân (*)[/TD]
[/TR]
[TR]
[TD]Chia (/)
Các bạn viết giùm code để mình insert vào các file khác
Cám ơn các bạn đã quan tâm[/TD]
[/TR]
[/TABLE]
 

File đính kèm

Hic, mình thì không biết gì về code bạn ạ +-+-+-+

Mình thêm dòng đó vào nó vẫn y như vậy bạn.
Giúp mình thêm lần này nữa đi Cám ơn -=.,,
Mình bị nhầm code trên. Chắc code này ổn
Mã:
Function ValueEval(rng As String)
Dim i As Integer
Dim strTemp As String
rng = Application.Trim(Right(rng, Len(rng) - InStr(rng, ":")))
rng = Replace(rng, "m2", "")
rng = Replace(rng, "m3", "")


For i = 1 To Len(rng)
    Select Case Asc(Mid(rng, i, 1))
    Case 40 To 57
        strTemp = strTemp & Mid(rng, i, 1)
    End Select
Next i


strTemp = Replace(strTemp, ",", ".")
strTemp = Replace(strTemp, "/*", "*")
strTemp = Replace(strTemp, "/+", "+")
strTemp = Replace(strTemp, "/-", "-")
strTemp = Replace(strTemp, "//", "/")
If Not IsNumeric(Right(strTemp, 1)) Then strTemp = Left(strTemp, Len(strTemp) - 1)
ValueEval = Evaluate(strTemp)
End Function
 
Upvote 0
Cám ơn bạn, chắc được rồi
 
Upvote 0
Mình bị nhầm code trên. Chắc code này ổn
Mã:
Function ValueEval(rng As String)
Dim i As Integer
Dim strTemp As String
rng = Application.Trim(Right(rng, Len(rng) - InStr(rng, ":")))
rng = Replace(rng, "m2", "")
rng = Replace(rng, "m3", "")


For i = 1 To Len(rng)
    Select Case Asc(Mid(rng, i, 1))
    Case 40 To 57
        strTemp = strTemp & Mid(rng, i, 1)
    End Select
Next i


strTemp = Replace(strTemp, ",", ".")
strTemp = Replace(strTemp, "/*", "*")
strTemp = Replace(strTemp, "/+", "+")
strTemp = Replace(strTemp, "/-", "-")
strTemp = Replace(strTemp, "//", "/")
If Not IsNumeric(Right(strTemp, 1)) Then strTemp = Left(strTemp, Len(strTemp) - 1)
ValueEval = Evaluate(strTemp)
End Function
Bây giờ lại thêm lỗi này nữa bạn ạ :
14*((3,14*1,2*1,2/4) - (3,14*1*1/4)) = #VALUE
Theo mình dò từ từ thì Nếu biểu thức có nhiều hơn 1 cặp dấu "()" công thức sẽ báo lỗi
Mong bạn giúp giùm, mình dò theo code của bạn mà tại không biết về Visua Basic nên chả hiểu gì hết.
Cám ơn bạn nhiều
 
Upvote 0
Bây giờ lại thêm lỗi này nữa bạn ạ :
14*((3,14*1,2*1,2/4) - (3,14*1*1/4)) = #VALUE
Theo mình dò từ từ thì Nếu biểu thức có nhiều hơn 1 cặp dấu "()" công thức sẽ báo lỗi
Mong bạn giúp giùm, mình dò theo code của bạn mà tại không biết về Visua Basic nên chả hiểu gì hết.
Cám ơn bạn nhiều
Hic, vậy thì đổi lại vậy
Mã:
Function ValueEval(rng As String)
Dim i As Integer
Dim strTemp As String
rng = Application.Trim(Right(rng, Len(rng) - InStr(rng, ":")))
rng = Replace(rng, "m2", "")
rng = Replace(rng, "m3", "")


For i = 1 To Len(rng)
    Select Case Asc(Mid(rng, i, 1))
    Case 40 To 57
        strTemp = strTemp & Mid(rng, i, 1)
    End Select
Next i


strTemp = Replace(strTemp, ",", ".")
strTemp = Replace(strTemp, "/*", "*")
strTemp = Replace(strTemp, "/+", "+")
strTemp = Replace(strTemp, "/-", "-")
strTemp = Replace(strTemp, "//", "/")
If Right(strTemp, 1) = "/" Then strTemp = Left(strTemp, Len(strTemp) - 1)
ValueEval = Evaluate(strTemp)
End Function
 
Upvote 0
Cám ơn bạn, code đã chạy dược
 
Upvote 0
Hic, vậy thì đổi lại vậy
Mã:
Function ValueEval(rng As String)
Dim i As Integer
Dim strTemp As String
rng = Application.Trim(Right(rng, Len(rng) - InStr(rng, ":")))
rng = Replace(rng, "m2", "")
rng = Replace(rng, "m3", "")


For i = 1 To Len(rng)
    Select Case Asc(Mid(rng, i, 1))
    Case 40 To 57
        strTemp = strTemp & Mid(rng, i, 1)
    End Select
Next i


strTemp = Replace(strTemp, ",", ".")
strTemp = Replace(strTemp, "/*", "*")
strTemp = Replace(strTemp, "/+", "+")
strTemp = Replace(strTemp, "/-", "-")
strTemp = Replace(strTemp, "//", "/")
If Right(strTemp, 1) = "/" Then strTemp = Left(strTemp, Len(strTemp) - 1)
ValueEval = Evaluate(strTemp)
End Function
Mong bạn giúp giùm mình thêm đoạn code nữa để tính số mũ ví dụ : 15^2
- Đoạn code trên nếu để 15^2 sẽ ra 152
Cám ơn bạn nhiều
 
Upvote 0
thêm 94 trong case nữa: Case 40 To 57 thành Case 40 To 57, 94
Cám ơn bạn đã nhiệt tình giúp mình.
Đoạn code chạy rất tốt cho công việc của mình.
Nay mình nhờ bạn giúp mình thêm chút nữa nhé :
Mình muốn thay số mũ như 2[SUP]2[/SUP] = 2^2 ( Nghĩa là 2 bình phương ) thì thêm như thế nào bạn.
(Có một số người thích để chỉ số trên cho đẹp, mà mình sửa như thế trong một file dự toán thì lâu quá)
Cám ơn bạn trước.
 
Upvote 0
Bạn thử thế này coi
Mã:
Function ValueEval(cel As Range)
Dim i As Integer
Dim strTemp As String, rng As String
For i = 1 To Len(cel.Value)
    If cel.Characters(i, 1).Font.Superscript Then
        rng = rng & "^" & Mid(cel.Value, i, 1)
    Else
        rng = rng & Mid(cel.Value, i, 1)
    End If
Next
rng = Application.Trim(Right(rng, Len(rng) - InStr(rng, ":")))
rng = Replace(rng, "m2", "")
rng = Replace(rng, "m3", "")


For i = 1 To Len(rng)
    Select Case Asc(Mid(rng, i, 1))
    Case 40 To 57, 94
        strTemp = strTemp & Mid(rng, i, 1)
    End Select
Next i


strTemp = Replace(strTemp, ",", ".")
strTemp = Replace(strTemp, "/*", "*")
strTemp = Replace(strTemp, "/+", "+")
strTemp = Replace(strTemp, "/-", "-")
strTemp = Replace(strTemp, "//", "/")
If Right(strTemp, 1) = "/" Then strTemp = Left(strTemp, Len(strTemp) - 1)
MsgBox (strTemp)
ValueEval = Evaluate(strTemp)
End Function
 
Upvote 0
nếu có hàm round trong công thức thì làm thế nào hả anh?
Xin chân thành cảm ơn, em mò mấy bữa rồi mà chưa ra
 
Upvote 0
Web KT

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

Back
Top Bottom