Tính tổng trong 1 vùng động có điều kiện (1 người xem)

Liên hệ QC

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

daivanhung

Thành viên mới
Tham gia
16/11/12
Bài viết
25
Được thích
2
Nghề nghiệp
Kỹ sư Kết Câu XDDD & CN
Xin chào GPE!
Em đã nghiên cứu về VBA for excel được gần 1 năm, tuy nhiên trình độ còn hạn chế nên rất mong các thầy, anh chị em trong diễn đàn giúp em giải quyết 1 thuật toán ứng dụng trong việc kinh doanh của em ạ. fiel Excel của e có 2 sheet gồm:
1, sheet(DS) ' là sheet nhập đơn đặt hàng sản phẩm của khách hàng.
2, Sheet(QLSK) ' là sheet nhập tên, mã, giá, sự kiện khuyến mại cho từng sản phẩm.
Yêu cầu của em là:
- Em muốn khi nhập xong 1 đơn đặt hàng từ khách hàng thì sẽ có 1 ô ở cuối dòng thanh toán của khách hàng đó tự động tính tổng tiền thanh toán của khách hàng đó ạ.
- Em xin gửi file excel đính kèm ạ.

Rất mong được sự giúp đỡ của các thầy, anh, chị em trong diễn đàn ạ.
Trân trọng cảm ơn diễn đàn !
 

File đính kèm

Cảm ơn các bạn đã quan tâm, Mình lần đầu tạo topic nên không biết. Rất xin lỗi các bạn nhé. Rất mong các bạn giúp mình trong topic Tính tổng trong 1 vùng động có điều kiện

ở box "lập trình với excel" mình mới tạo.
ChanhTQ@ : Trả lời bạn là: Ô cuối cùng ở đây là ô ngay dưới cùng của các ô thanh toán trong đơn đặt hàng của 1 khách hàng tại 1 ngày.
Kiểu ngày mình đã chỉnh sửa lại theo kiểu: mm/dd/yyyy đúng như mặc định của excel rồi. Trước mình để dd/mm/yyyy để khi nhập date thế nào thì hiện đúng như thế.

Rất mong các bạn giúp mình trong topic nhé. Trân thành cảm ơn!
Ô cuối của từng KH thì có thể đoán được nhưng khi nào thì "tự động"?
Biết khi nào thì bạn cho nó là dòng cuối, đã nhập xong 1 KH ?
Ví dụ sau khi nhập 100 KH mới "tự động", hay mối KH mỗi "tự động", v.v...
-----------
Tạm thời như trong file, khi bạn click chuột phải vào dòng 8 và 13 thì "tự động", không chịu thì thôi vậy.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Nói thật là dữ liệu của bạn không theo dạng chuẩn => trong tương lai sẽ khó khăn cho chính bạn. Thôi cứ là tạm theo dữ liệu cũ.

Copy code sau vào 1 module
Mã:
Sub KhuyenMai(Target As Range, NgayMua As Date, MaSp As String)
    Dim ArrKm(), ArrNgayKM()
    Dim i As Long, j As Long
    Dim Rw As Long, Col As Long
    With Sheets("QLSK")
        ArrKm = .Range("A7").Resize(.Range("B7").End(xlDown).Row, .Range("B7").End(xlToRight).Column).Value
        ArrNgayKM = .Range("E5").Resize(, .Range("E5").End(xlToRight).Column).Value2
    End With
    For i = 1 To UBound(ArrKm, 1)
        If UCase(ArrKm(i, 2)) = UCase(MaSp) Then
            Rw = i
            Exit For
        End If
    Next
    For j = 1 To UBound(ArrNgayKM, 2) / 2 Step 2
        If ArrNgayKM(1, j) <= NgayMua And ArrNgayKM(1, j + 1) >= NgayMua Then
            Col = j + 4
            Exit For
        End If
    Next
    'Target la o ma san pham
    Target.Offset(, 1) = ArrKm(Rw, 3)    'Ten sp
    If Col Then
        Target.Offset(, 3) = Sheets("QLSK").Cells(2, Col)     'Ten su kien
        Target.Offset(, 4) = ArrKm(Rw, Col)    '%Khuyen mai
        Target.Offset(, 7) = ArrKm(Rw, Col + 1)  '%Khuyen mai kho
    End If
End Sub

Copy code sau vào cửa số code sheet DS
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Dim NgayMua As Date, MaSp As String
    Dim TongThuong As Double, TongKm As Double
    Dim i As Long
    If Target.Column = 4 Then
        MaSp = Target.Value
        If Target.Offset(, -3) <> "" Then
            NgayMua = Target.Offset(, -3).Value2
        Else
            Do
                i = i + 1
            Loop Until VBA.IsDate(Cells(Target.Row - i, 1)) = True Or Target.Row - i = 5
            If VBA.IsDate(Cells(Target.Row - i, 1)) = False Then
                MsgBox "Kiem tra lai ngay", vbInformation, "Thong bao"
                Exit Sub
            Else
                NgayMua = Cells(Target.Row - i, 1)
            End If
        End If
        Call KhuyenMai(Target, NgayMua, MaSp)
    End If
    i = 0
    If Target.Column = 1 Then
        If UCase(Target) = "TOTAL" Then
            Do
                i = i + 1
                TongThuong = TongThuong + Cells(Target.Row - i, 13)
                TongKm = TongKm + Cells(Target.Row - i, 14)
            Loop Until VBA.IsDate(Cells(Target.Row - i, 1)) = True Or Target.Row - i = 5
            Target.Offset(, 12) = TongThuong
            Target.Offset(, 12).Font.Color = 255
            Target.Offset(, 12).Font.Bold = True
            Target.Offset(, 13).Font.Color = 255
            Target.Offset(, 13).Font.Bold = True
            Target.Offset(, 13) = TongKm
        End If
    End If
    Application.ScreenUpdating = True
End Sub

Sử dụng

- Khi bạn nhập mã số xong thì sẽ tự động điền tên sản phẩm, % khuyến mãi, % khuyến mãi kho

- Tại dòng bạn muốn tính tổng thì cột A gõ chữ "Total"

Nhớ nhập theo đúng dữ liệu bạn đã gửỉ lên.
 
Upvote 0

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

Back
Top Bottom