Tính tổng tiền của 1 khách hàng có nhiều MKH (4 người xem)

Liên hệ QC

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

tungvu83

Thành viên mới
Tham gia
16/2/12
Bài viết
43
Được thích
0
Mà tại sao 1 khách hàgn có nhiều mã được nhỉ?

Bạn nêu lí do để thuyết fục việc này xem nào?
Thậm chí có những khách hàng có đến hơn 40 mã chứ anh. Một MKH là 1 Mã điểm đo điện năng, 1 khách hàng có thể có nhiều mã điểm đo. Em xử lý được vấn đề này rồi, cảm ơn mọi người!
 
Nhờ các cao thủ chỉ giáo, em nghiên cứu mấy ngày nay mà không ra
Các câu hỏi em ghi luôn vào file đính kèm. Xin cảm ơn trước ạ
 

File đính kèm

Bạn còn sai chính tả nhiều lắm !

Xem trong file sẽ rõ;

Macro chạy với tổ hợp phím nóng {CTRL}+{SHIFT}+R
 

File đính kèm

Em muốn có MKH theo hàng ngang, tức là 1 khách hàng nằm trong 1 dòng thôi rồi tính tiền
Phần cho MKH theo hàng ngang thì em làm thủ công được vì có nhiều khách hàng tên không giống nhau
Nhưng phần tổng tiền thì em không nghĩ ra hàm nào để ra tiền. Em dùng vlookup kết hợp với sumif thì chỉ được 1 MKH một rồi phải cộng vào nhau nên CT rất dài.

Trường hợp này có dùng hàm bình thường được không ạ? Em chưa biết về macro
 
Em muốn có MKH theo hàng ngang, tức là 1 khách hàng nằm trong 1 dòng thôi rồi tính tiền
Phần cho MKH theo hàng ngang thì em làm thủ công được vì có nhiều khách hàng tên không giống nhau
Nhưng phần tổng tiền thì em không nghĩ ra hàm nào để ra tiền. Em dùng vlookup kết hợp với sumif thì chỉ được 1 MKH một rồi phải cộng vào nhau nên CT rất dài.

Trường hợp này có dùng hàm bình thường được không ạ? Em chưa biết về macro
Bao nhiêu khách hàng thì mặc kệ, ta tính tổng tiền theo TÊN thì cứ SUMIF bình thường thôi:
PHP:
=SUMIF($A$2:$A$69,E2,$C$2:$C$69)
Còn muốn tính theo mã KH thì vầy:
PHP:
=SUMPRODUCT(SUMIF($B$2:$B$69,$F2:$J2,$C$2:$C$69))
 
Lần chỉnh sửa cuối:
Nếu yêu cầu như kết quả bài 2 của Bác Sa, thì dùng code sau đây sẽ nhanh gấp 9 lần.

Thông cảm Bác Sa, bác ấy ghét Dic và mảng.

PHP:
Sub PlayWithArray()
Dim SArr, RArr, Dic1, MaxCols As Long
Dim i As Long, s As Long, EndR As Long, n As Long
t = Timer
Set Dic1 = CreateObject("Scripting.Dictionary")
With Dic1
EndR = Sheet2.[A65000].End(xlUp).Row
SArr = Sheet2.Range("A2:C" & EndR).Value
ReDim RArr(1 To EndR - 1, 1 To 12)
        MaxCols = 2
For i = 1 To UBound(SArr, 1)
    If Not .Exists(SArr(i, 1)) Then
        s = s + 1
        .Add SArr(i, 1), s
        RArr(s, 1) = SArr(i, 1)
        RArr(s, 2) = SArr(i, 2)
        RArr(s, 11) = SArr(i, 3)
        RArr(s, 12) = 2
    Else
        n = .Item(SArr(i, 1))
        RArr(n, 12) = RArr(n, 12) + 1
        RArr(n, RArr(n, 12)) = SArr(i, 2)
        RArr(n, 11) = RArr(n, 11) + SArr(i, 3)
        If MaxCols < RArr(n, 12) Then MaxCols = RArr(n, 12)
    End If
Next
End With
With Sheet2
.[N2].Resize(s, 11) = RArr
.[N2].Offset(, MaxCols).Resize(, 10 - MaxCols).EntireColumn.Delete
.[M1] = Timer - t
End With
End Sub
 

File đính kèm

Nếu yêu cầu như kết quả bài 2 của Bác Sa, thì dùng code sau đây sẽ nhanh gấp 9 lần.

Thông cảm Bác Sa, bác ấy ghét Dic và mảng.

File của sư phụ nếu copy thêm dữ liệu đến 60000 dòng thì nó báo lỗi ---> Em cũng chẳng biết đó là lỗi gì nữa
(Đương nhiên với dữ liệu cở này, em tin rằng tốc độ không chỉ gấp 9 lần đâu... có thể là 90 lần hoặc 900 lần cũng nên)
Ẹc... Ẹc...
 
Lần chỉnh sửa cuối:
Chỉnh sửa lần cuối bởi điều hành viên:
File của sư phụ nếu copy thêm dữ liệu đến 60000 dòng thì nó báo lỗi ---> Em cũng chẳng biết đó là lỗi gì nữa
(Đương nhiên với dữ liệu cở này, em tin rằng tốc độ không chỉ gấp 9 lần đâu... có thể là 90 lần hoặc 900 lần cũng nên)
Ẹc... Ẹc...

Dữ liệu 60 ngàn dòng mà tạo ngẫu nhiên thì chắc là thiếu cột.
Sửa lại RArr(1 To EndR - 1, 1 To 202)
và 11 thành 201, 12 thành 202, 10 thành 200 (nếu đúng là lỗi này)

Copy xuống thì thiếu cột chắc luôn. 65000 cột cũng thiếu

/(/gười ta đã nêu vầy mà còn cố xác đưa Dic lên: /-)úng là Lão Chết Tiệt!

Nhưng sự thực vẫn là sự thực, bác Sa ghét Dic và mảng. Khà khà khà!
 
Lần chỉnh sửa cuối:
Bao nhiêu khách hàng thì mặc kệ, ta tính tổng tiền theo TÊN thì cứ SUMIF bình thường thôi:
PHP:
=SUMIF($A$2:$A$69,E2,$C$2:$C$69)
Còn muốn tính theo mã KH thì vầy:
PHP:
=SUMPRODUCT(SUMIF($B$2:$B$69,$F2:$J2,$C$2:$C$69))


Cảm ơn anh! Em dùng CT này được rồi, cho thêm sumproduct ở đầu thôi mà hay quá em không nghĩ ra
à còn nếu em dồn các MKH vào cùng 1 cột có được không ạ, để đỡ tốn diện tích, không biết hàm có hiểu không?
Cảm ơn mọi người
 
Nhưng sự thực vẫn là sự thực, bác Sa ghét Dic và mảng.
Khà khà khà!

/-)úng là mình mới lò mò học về cái thằng DIc này & chỉ mới dàm dùng trong "nội bộ" mà thôi;

Cũng rất cảm ơn các bạn về các bài viết về Dic & Aray, dịp này chứ chả còn có khi khác.
 
Dồn như vầy nè, dùng pivot table.

Còn dữ liệu 60 ngàn dòng mà thiếu cột là do sau khi copy, mã bị trùng, có bao nhiêu mã trùng đều liệt kê hết hàng ngang, nên thiếu.

Nhưng xài Pivot table thì chấp mã trùng, các mã trùng chỉ thể hiện 1 dòng và bị cộng dồn hết.
 

File đính kèm

Lần chỉnh sửa cuối:
Ý em là 1 khách hàng có nhiều MKH nếu mỗi MKH 1 cột thì rất là dài, để em thử làm list đổ xuống như anh ptm0412 xem CT còn đúng không
 
Mà tại sao 1 khách hàgn có nhiều mã được nhỉ?

Bạn nêu lí do để thuyết fục việc này xem nào?
 
Web KT

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

Back
Top Bottom