Tính tổng các số trong chuỗi (1 người xem)

  • Thread starter Thread starter MrPi
  • Ngày gửi Ngày gửi

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

MrPi

Thành viên hoạt động
Tham gia
14/12/08
Bài viết
102
Được thích
46
Tôi có 1 file excel trong đó có 1 cột dạng text như:
12A1(3),8KD2(6),10A12(4),21AC5(6), ...
Độ dài các chuỗi không đều nhau (file đính kèm). Yêu cầu tính tổng các số trong ngoặc tròn. Chẳng hạn trong ví dụ trên: Tổng=3+6+4+6=19
Hoặc: 10C5(2) có tổng bằng 2
vv...
ACE giúp tôi với, xin cảm ơn trước. Có thể đùng VBA cũng được ạ.
 

File đính kèm

Tôi có 1 file excel trong đó có 1 cột dạng text như:
12A1(3),8KD2(6),10A12(4),21AC5(6), ...
Độ dài các chuỗi không đều nhau (file đính kèm). Yêu cầu tính tổng các số trong ngoặc tròn. Chẳng hạn trong ví dụ trên: Tổng=3+6+4+6=19
Hoặc: 10C5(2) có tổng bằng 2
vv...
ACE giúp tôi với, xin cảm ơn trước. Có thể đùng VBA cũng được ạ.
Một cách dùng VBA
Mã:
Public Function Tong(Cll) As Long
    Dim Re As Object
    Set Re = CreateObject("vbscript.regexp")
    If Cll = "" Then Exit Function
    Cll = Replace(Cll, " ", "")
        With Re
            .Global = True
            .IgnoreCase = True
            .Pattern = "\w+\(|\)\,|\)"
             Tong = Evaluate(Replace(Application.WorksheetFunction.Trim(.Replace(Cll, " ")), " ", "+"))
        End With
End Function
Thân
 

File đính kèm

Một cách dùng VBA
Mã:
Public Function Tong(Cll) As Long
    Dim Re As Object
    Set Re = CreateObject("vbscript.regexp")
    If Cll = "" Then Exit Function
    Cll = Replace(Cll, " ", "")
        With Re
            .Global = True
            .IgnoreCase = True
            .Pattern = "\w+\(|\)\,|\)"
             Tong = Evaluate(Replace(Application.WorksheetFunction.Trim(.Replace(Cll, " ")), " ", "+"))
        End With
End Function
Thân

Bác Cò ơi, hàm của bác chuỗi cuối không đóng (Chưa đủ ngoặc tròn) nó vẫn cộng, 1 trong các ngoặc tròn là ký tự thì lỗi. Bác rào tiếp các trường hợp này.
Em cũng viết 1 hàm nhưng không sử dụng Object, em gửi lên anh em tham khảo nha:

Mã:
Function MySum(mStr As String) As Long
Dim Res As Long, i As Integer, j As Integer
i = 1: j = 1: Res = 0
On Error GoTo StopDo
Do
i = InStr(i, mStr, "(")
j = InStr(i, mStr, ")")
Res = Res + Val(IIf(IsNumeric(Mid(mStr, i + 1, j - i - 1)), Mid(mStr, i + 1, j - i - 1), 0))
 i = j
Loop
StopDo:
MySum = Res
End Function
 
Cảm ơn các thầy quá nhiều! Mong các thầy luôn hỗ trợ tốt cho 4rums ...
 

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

Back
Top Bottom