Tính tổng số thập phân trong 1 ô excel (1 người xem)

Liên hệ QC

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

dongthuan

Thành viên mới
Tham gia
20/10/08
Bài viết
12
Được thích
0
Nhờ các anh em cao thủ chỉ giáo:
Mính muốn sum 1 dãy số trong 1 ô excell nhưng không biết dùng hàm nào.
VD: A1=125.36 mình muốn cộng từng số lại (1+2+5+3+6=17) không biết dùng hàm nào nhờ các anh em chỉ giúp. thanks
 
Nhờ các anh em cao thủ chỉ giáo:
Mính muốn sum 1 dãy số trong 1 ô excell nhưng không biết dùng hàm nào.
VD: A1=125.36 mình muốn cộng từng số lại (1+2+5+3+6=17) không biết dùng hàm nào nhờ các anh em chỉ giúp. thanks
bạn thử dùng đoạn code này xem sao?
PHP:
Sub tinhtong()
Dim a As Variant
Dim i As Integer
'Dim c As Double
a = Application.WorksheetFunction.Substitute(Range("a1"), ".", "")
Dim tong As Double
tong = 0
For i = 1 To Len(a)
tong = tong + Mid(a, i, 1)
Next i
Range("b2").Value = tong
End Sub
 
Nhờ các anh em cao thủ chỉ giáo:
Mính muốn sum 1 dãy số trong 1 ô excell nhưng không biết dùng hàm nào.
VD: A1=125.36 mình muốn cộng từng số lại (1+2+5+3+6=17) không biết dùng hàm nào nhờ các anh em chỉ giúp. thanks
Đây là cách dùng công thức (Đúng với ví dụ của bạn)
=SUMPRODUCT(MID(SUBSTITUTE(A1,".",0),ROW(INDIRECT("1:"&LEN(A1))),1)*1)
 
bạn thử dùng đoạn code này xem sao?
PHP:
Sub tinhtong()
Dim a As Variant
Dim i As Integer
'Dim c As Double
a = Application.WorksheetFunction.Substitute(Range("a1"), ".", "")
Dim tong As Double
tong = 0
For i = 1 To Len(a)
tong = tong + Mid(a, i, 1)
Next i
Range("b2").Value = tong
End Sub
Nếu dùng code thì đố biết bằng cách nào khỏi dùng đến vòng lập?
Ẹc... Ẹc...
 
Với dữ liệu của bài này sử dụng công thức của "người mặt trăng" là Ok rồi, code chỉ là học tập
Dùng vòng lặp:
Mã:
Function TiTo(Cll)
    Dim I, Tong
        For I = 1 To Len(Cll)
            If IsNumeric(Mid(Cll, I, 1)) Then Tong = Tong + Val(Mid(Cll, I, 1))
        Next I
    TiTo = Tong
End Function
Không dùng vòng lặp
Mã:
Public Function Tong(Cll)
    Dim CoRe, Tam
    Set CoRe = CreateObject("VBScript.RegExp")
        With CoRe
            .Global = True
            .Pattern = ""
            Tam = .Replace(Replace(Cll, ".", ""), "+")
            Tam = Evaluate(Mid(Tam, 2, Len(Tam) - 2))
        End With
    Tong = Tam
End Function
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Không dùng vòng lặp
Mã:
Public Function Tong(Cll)
    Dim CoRe, Tam
    Set CoRe = CreateObject("VBScript.RegExp")
        With CoRe
            .Global = True
            .Pattern = ""
            Tam = .Replace(Replace(Cll, ".", ""), "+")
            Tam = Evaluate(Mid(Tam, 2, Len(Tam) - 2))
        End With
    Tong = Tam
End Function
Ẹc... Ẹc... chưa mấy chính xác và chưa mấy tổng quát
Em thì làm vầy:
PHP:
Function SumString(ByVal Text As String) As Double
  With CreateObject("VBScript.RegExp")
    .Global = True: .Pattern = "\D"
    SumString = Evaluate(Join(Split(StrConv(.Replace(Text, ""), 64), Chr(0)), "+") & "0")
  End With
End Function
Chấp luôn chuổi có chứa Number và Text ---> Miễn có Number là... Sum
Giải thuật:
- Tách lấy số (dùng VBScript.RegExp)
- Convert dãy số vừa lấy thành mảng (dùng StrConv)
- Nối mảng vừa tạo với dấu phân cách là dấu +
- Lồng Evaluate vào để lấy kết quả
--------------
Hoặc cách gần giống với cách của anh:
PHP:
Function SumString(ByVal Text As String) As Double
  With CreateObject("VBScript.RegExp")
    .Global = True: .Pattern = "\D"
    Text = .Replace(Text, "")
    .Pattern = ""
    SumString = Evaluate(.Replace(Text, "+") & "0")
  End With
End Function
 

File đính kèm

Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom