PhiTQ-ME
Thành viên mới

- Tham gia
- 23/4/24
- Bài viết
- 5
- Được thích
- 0
Function TT(ParamArray mang() As Variant) As Double
Dim T, A As Double, T1, n As Long, Tam$
For Each T In mang
For Each T1 In T
n = 1
If T1 <> Empty Then
If Len(T1) > 255 Then
For n = n To Len(T1)
Tam = Mid(T1, n, 255)
s = InStr(1, StrReverse(Mid(T1, n, 255)), "+")
Tam = Mid(T1, n, 255 - s)
If Right(Tam, 1) = "+" Then
Tam = Left(Tam, Len(Tam) - 1)
End If
A = A + Evaluate("=" & Replace(Tam, ",", "."))
n = n + Len(Tam)
Next
Else
A = A + Evaluate("=" & Replace(T1, ",", "."))
End If
End If
Next
Next
TT = A
End Function
Module của VBA nếu export ra thì đuôi là BAS.Viết bằng basic à, thấy file có đuôi .bas.
Bạn post lại file excel nhé.
Code dùng được, có giá trị rất cao bác ạ. Em cảm ơn bác nhiềuthử code này tham khảo xem sao?
Mã:Function TT(ParamArray mang() As Variant) As Double Dim T, A As Double, T1, n As Long, Tam$ For Each T In mang For Each T1 In T n = 1 If T1 <> Empty Then If Len(T1) > 255 Then For n = n To Len(T1) Tam = Mid(T1, n, 255) s = InStr(1, StrReverse(Mid(T1, n, 255)), "+") Tam = Mid(T1, n, 255 - s) If Right(Tam, 1) = "+" Then Tam = Left(Tam, Len(Tam) - 1) End If A = A + Evaluate("=" & Replace(Tam, ",", ".")) n = n + Len(Tam) Next Else A = A + Evaluate("=" & Replace(T1, ",", ".")) End If End If Next Next TT = A End Function
Option Explicit
Function tinhtong(vung As Range) As Double
Dim i&, j&, m&, st$, sp, s, c As Double, cell As Range
For Each cell In vung
st = Replace(cell.Value, ",", ".")
sp = Split(st, "+")
For i = 0 To UBound(sp)
If IsNumeric(Evaluate("=" & sp(i))) Then
c = c + Evaluate("=" & sp(i))
Else
For j = i + 1 To UBound(sp)
sp(j) = sp(i) & "+" & sp(j)
m = m + 1
If IsNumeric(Evaluate("=" & sp(j))) Then
c = c + Evaluate("=" & sp(j))
i = i + m
Exit For
End If
Next
End If
Next
Next
tinhtong = c
End Function
Cảm ơn bác đã bớt thời gian để xử lý. Em sẽ xem hàm ạMột cách khác:
PHP:Option Explicit Function tinhtong(vung As Range) As Double Dim i&, j&, m&, st$, sp, s, c As Double, cell As Range For Each cell In vung st = Replace(cell.Value, ",", ".") sp = Split(st, "+") For i = 0 To UBound(sp) If IsNumeric(Evaluate("=" & sp(i))) Then c = c + Evaluate("=" & sp(i)) Else For j = i + 1 To UBound(sp) sp(j) = sp(i) & "+" & sp(j) m = m + 1 If IsNumeric(Evaluate("=" & sp(j))) Then c = c + Evaluate("=" & sp(j)) i = i + m Exit For End If Next End If Next Next tinhtong = c End Function
Bạn cần lưu ý trường hợp đặc biệt: đó là luật nhân chia trước, cộng trừ sau ở bên trong dấu ngoặc. VD:Cảm ơn bác đã bớt thời gian để xử lý. Em sẽ xem hàm ạ
Dạ bác ạ. Em test rồi có gì thông tin ạBạn cần lưu ý trường hợp đặc biệt: đó là luật nhân chia trước, cộng trừ sau ở bên trong dấu ngoặc. VD:
...+2*3*(6/2+ 3*4-2*3)/5*6+....
Giả sử biểu thức này nằm trong vùng ký tự 255, nếu tách ra là
<255:
...+2*3*(6/2+ 3
>255:
*4-2*3)/5*6+....
Mình chưa test cái này, vì không biết data của bạn có t/h này hay không.
Bạn có thể test thử để xem kết quả 2 code trên có đúng không nhé