Hàm VBA tự tạo phép cộng theo ý muốn (1 người xem)

Liên hệ QC

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

duynhatgpe

Thành viên mới
Tham gia
1/12/15
Bài viết
42
Được thích
5
Xin chào mọi người thân mến !
Hiện tại mình có vấn đề cần sự giúp đỡ về code excel để làm phép cộng số có kết quả theo ý muốn của mình .ở đây các số công nhau ở hàng đơn vị hay hàng chục ,hàng trăm .....đều bỏ hàng chục (nếu có)chỉ lấy con số đơn vị với nhau
Thành thật cảm ơn !
 

File đính kèm

Bạn thử sử dụng code sau:
Mã:
Public Function TinhTong(Vung As Range) As Long
Dim dv As Integer, chuc As Integer, tram As Integer, sCell As Range
For Each sCell In Vung
    dv = (dv + sCell.Value Mod 10) Mod 10
    chuc = (chuc + (sCell.Value Mod 100) \ 10) Mod 10
    tram = (tram + (sCell.Value Mod 1000) \ 100) Mod 10
Next
TinhTong = tram * 100 + chuc * 10 + dv
End Function
Sử dụng để tính tổng D1:D2 là
Mã:
=tinhtong(D1:D2)
 
Upvote 0
Bạn thử sử dụng code sau:
Mã:
Public Function TinhTong(Vung As Range) As Long
Dim dv As Integer, chuc As Integer, tram As Integer, sCell As Range
For Each sCell In Vung
    dv = (dv + sCell.Value Mod 10) Mod 10
    chuc = (chuc + (sCell.Value Mod 100) \ 10) Mod 10
    tram = (tram + (sCell.Value Mod 1000) \ 100) Mod 10
Next
TinhTong = tram * 100 + chuc * 10 + dv
End Function
Sử dụng để tính tổng D1:D2 là
Mã:
=tinhtong(D1:D2)
code này còn hạn chế với số có 3 chữ số, code của mình hỏi dài dòng, và thuật toán chắc chưa tối ưu nhưng có thể chơi tới số double
Cú pháp: Tong(số A, Số B)
Mã:
Function Tong(a As Double, b As Double) As Double
    Dim i As Integer, a1 As String, b1 As String
    a1 = "" & StrReverse(a): b1 = "" & StrReverse(b)
    For i = 1 To WorksheetFunction.Min(Len(a1), Len(b1))
        Tong = Tong & Right("" & Val(Mid(a1, i, 1)) + Val(Mid(b1, i, 1)), 1)
    Next i
    If Len(a1) > Len(b1) Then
        Tong = Tong & StrReverse(Right(a1, Len(a1) - Len(b1)))
    ElseIf Len(a1) < Len(b1) Then
        Tong = Tong & StrReverse(Right(b1, Len(b1) - Len(a1)))
    Else
        Tong = Tong
    End If
    Tong = CDbl(StrReverse(Tong))
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Mình rất cảm ơn , nhưng cộng cho nhiều range chon riềng lẻ khác nhau thì chưa được ...
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn đánh TongNhieuVung( Quét vùng cần tính)
Mã:
Function Tong(a As Double, b As Double) As Double
    Dim i As Integer, a1 As String, b1 As String, temp As String
    a1 = "" & StrReverse(a): b1 = "" & StrReverse(b)
    For i = 1 To WorksheetFunction.Min(Len(a1), Len(b1))
        temp = temp & Right("" & Val(Mid(a1, i, 1)) + Val(Mid(b1, i, 1)), 1)
    Next i
    If Len(a1) > Len(b1) Then
        temp = temp & Right(a1, Len(a1) - Len(b1))
    ElseIf Len(a1) < Len(b1) Then
        temp = temp & StrReverse(Right(b1, Len(b1) - Len(a1)))
    Else
        temp = temp
    End If
    Tong = CDbl(StrReverse(temp))
End Function
Function TongNhieuVung(rng As Range) As Double
    Dim rng1 As Range, i As Integer
    If rng.Count < 2 Then
        TongNhieuVung = rng.Value
        Exit Function
    End If
    TongNhieuVung = rng(1)
    For i = 2 To rng.Count
        If rng(i).Value > 0 Then
            TongNhieuVung = Tong(TongNhieuVung, rng(i))
        End If
    Next i
End Function
 
Upvote 0
Xin chào mọi người thân mến !
Hiện tại mình có vấn đề cần sự giúp đỡ về code excel để làm phép cộng số có kết quả theo ý muốn của mình .ở đây các số công nhau ở hàng đơn vị hay hàng chục ,hàng trăm .....đều bỏ hàng chục (nếu có)chỉ lấy con số đơn vị với nhau
Thành thật cảm ơn !

Thắc mắc: Bài toán này dùng vào việc gì?
 
Upvote 0
Mình có thêm một cách giải quyết vấn đề trên nhưng còn lòng vòng trong thực hành VBA lắm ,xin nhờ các bậc anh chị ,thầy cô chỉ dẫn thêm .Thành thật cảm ơn
 
Upvote 0
Web KT

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

Back
Top Bottom