Xin được giúp đỡ DÒ TÌM lấy danh sách tổng giá các đơn hàng

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

LINHCM

Thành viên mới
Tham gia
10/8/24
Bài viết
22
Được thích
3
Em xin chào các anh chị quản trị Web: www.giaiphapexcel.com. Em chào các anh chị cộng đồng excel.
Em gặp vấn đề rất khó, xin nhờ được giúp đỡ như thế này:
Em có một danh sách các đơn hàng đồng giá theo ngày cho các mã hàng (qua mỗi ngày các mã hàng này sẽ có giá khác).
Em cần thống kê 2 danh sách:
Danh sách 1: Gồm tất cả các mã đơn hàng liệt kê trong một cột từ trên đổ xuống.
Danh sách 2: Tổng tiền ứng với mỗi mã đơn hàng.
Mong được sự giúp đỡ của anh chị.ĐƠN HÀNG.jpg
 

File đính kèm

  • DO TIM LẤY SỐ LƯỢNG NHIỀU ĐƠN HÀNG CÓ MÃ HÀNG GIỐNG NHAU.xlsx
    10 KB · Đọc: 12
Trường hợp này Dùng Power Query xử lý cũng được nhá!
 

File đính kèm

  • DO TIM LẤY SỐ LƯỢNG NHIỀU ĐƠN HÀNG CÓ MÃ HÀNG GIỐNG NHAU.xlsx
    21.8 KB · Đọc: 8
Dùng thử macro này xem

PHP:
Sub GPE()

Dim Dic As Object, Key, i&, Lr&, Arr(), Tmp
Dim k&, Res(1 To 10000, 1 To 2), Txt, a

Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("Sheet1")
    Lr = .Range("C" & Rows.Count).End(xlUp).Row
    Arr = .Range("C4:D" & Lr).Value
    For i = 1 To UBound(Arr)
        Txt = Replace(Arr(i, 1), " ", ""): Tmp = Split(Txt, ",")
        For a = LBound(Tmp) To UBound(Tmp)
            Key = Tmp(a)
            If Not Dic.exists(Key) Then
                k = k + 1: Dic.Add (Key), k
                Res(k, 1) = Key
                Res(k, 2) = Arr(i, 2)
            Else
                Res(Dic.Item(Key), 2) = Res(Dic.Item(Key), 2) + Arr(i, 2)
            End If
        Next a
    Next i
    .Range("J4:K10000").ClearContents
    If k Then
        .Range("J4").Resize(k, 2).Value = Res
        MsgBox "Done"
    End If
End With

Set Dic = Nothing
End Sub
 

File đính kèm

  • DO TIM LẤY SỐ LƯỢNG NHIỀU ĐƠN HÀNG CÓ MÃ HÀNG GIỐNG NHAU.xlsm
    21.4 KB · Đọc: 6
Dùng thử macro này xem

PHP:
Sub GPE()

Dim Dic As Object, Key, i&, Lr&, Arr(), Tmp
Dim k&, Res(1 To 10000, 1 To 2), Txt, a

Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("Sheet1")
    Lr = .Range("C" & Rows.Count).End(xlUp).Row
    Arr = .Range("C4:D" & Lr).Value
    For i = 1 To UBound(Arr)
        Txt = Replace(Arr(i, 1), " ", ""): Tmp = Split(Txt, ",")
        For a = LBound(Tmp) To UBound(Tmp)
            Key = Tmp(a)
            If Not Dic.exists(Key) Then
                k = k + 1: Dic.Add (Key), k
                Res(k, 1) = Key
                Res(k, 2) = Arr(i, 2)
            Else
                Res(Dic.Item(Key), 2) = Res(Dic.Item(Key), 2) + Arr(i, 2)
            End If
        Next a
    Next i
    .Range("J4:K10000").ClearContents
    If k Then
        .Range("J4").Resize(k, 2).Value = Res
        MsgBox "Done"
    End If
End With

Set Dic = Nothing
End Sub
Em cảm ơn anh rất nhiều. Trên cả mong đợi luôn. Có những dòng code thật kì diệu quá.
 
Em xin chào các anh chị quản trị Web: www.giaiphapexcel.com. Em chào các anh chị cộng đồng excel.
Em gặp vấn đề rất khó, xin nhờ được giúp đỡ như thế này:
Em có một danh sách các đơn hàng đồng giá theo ngày cho các mã hàng (qua mỗi ngày các mã hàng này sẽ có giá khác).
Em cần thống kê 2 danh sách:
Danh sách 1: Gồm tất cả các mã đơn hàng liệt kê trong một cột từ trên đổ xuống.
Danh sách 2: Tổng tiền ứng với mỗi mã đơn hàng.
Mong được sự giúp đỡ của anh chị.View attachment 306306

Bạn có thể dùng công thức đối với bài này

G4= SORT(UNIQUE(TRIM(MID(SUBSTITUTE(CONCAT($C$4:$C$7&", "),", ",REPT(" ",100)),(ROW($1:$11)-1)*100+1,100))))

H4= SUMPRODUCT((ISNUMBER(SEARCH(G4,$C$4:$C$7)))*($D$4:$D$7))

Thân
 
Em xin chào các anh chị quản trị Web: www.giaiphapexcel.com. Em chào các anh chị cộng đồng excel.
Em gặp vấn đề rất khó, xin nhờ được giúp đỡ như thế này:
Em có một danh sách các đơn hàng đồng giá theo ngày cho các mã hàng (qua mỗi ngày các mã hàng này sẽ có giá khác).
Em cần thống kê 2 danh sách:
Danh sách 1: Gồm tất cả các mã đơn hàng liệt kê trong một cột từ trên đổ xuống.
Danh sách 2: Tổng tiền ứng với mỗi mã đơn hàng.
Mong được sự giúp đỡ của anh chị.View attachment 306306
Nếu Bạn dùng Google Sheets thì cũng có cách chỉ 1 công thức ra kết quả cả 2 cột
 
Tôi cung cấp thêm một cách làm nữa bằng công thức Excel 365. Cách làm này nếu danh sách ở cột C mã có mã lập lại công thức sẽ tính nhân theo số lần lặp,
Ví dụ nếu C4 là 115, 113, 111, 112, 114, 112 ứng với D4 là 500
C5 là 112 ứng với D5 là 200
Nếu tổng cho mã 112 kết quả sẽ là 1200
(Đây là tôi cố tình giả định để công thức tính cả tình huống đó)

Cách làm như sau:
+ Tại G4, công thức là:
=SORT( UNIQUE(TRIM(TEXTSPLIT( TEXTJOIN(",",,C4:C7),,","))))

+ Tại H4 công thức là:
=SUM(INT((LEN($C$4:$C$7)-LEN(SUBSTITUTE($C$4:$C$7,G4,"")))/LEN(G4))*$D$4:$D$7)
 
Bạn có thể dùng công thức đối với bài này

G4= SORT(UNIQUE(TRIM(MID(SUBSTITUTE(CONCAT($C$4:$C$7&", "),", ",REPT(" ",100)),(ROW($1:$11)-1)*100+1,100))))

H4= SUMPRODUCT((ISNUMBER(SEARCH(G4,$C$4:$C$7)))*($D$4:$D$7))

Thân
Công thức cột H của bạn thì được rồi, nhưng công thức cột G có 2 điểm cần cải thiện 1 chút.
- cái ROW($1:$11) thì cái 11 hiện tại đang phải đếm, nếu tổng các ngày mà nhiều hơn 11 mã hàng thì lại phải thay lại. => cái này thì dễ xử lý vì chỉ cần đếm số dấu cách +1 là xong.
- cái con số 100, ở bài này nếu tổng các mã hàng từ 34 trở lên thì công thức sẽ không còn đúng nữa (đang tính mỗi mã là 3 ký tự, 3*34=102>100).
Con số 100 này sẽ là khó khăn cho chúng ta lựa chọn, vì nếu chọn lớn thì khi có nhiều mã, chúng ta REPT lên thì giá trị sẽ vượt quá 32,767 ký tự, công thức sẽ báo lỗi, còn nếu chọn nhỏ thì sẽ bị tình trạng trên khi có nhiều mã hàng.
 
Công thức cột H của bạn thì được rồi, nhưng công thức cột G có 2 điểm cần cải thiện 1 chút.
- cái ROW($1:$11) thì cái 11 hiện tại đang phải đếm, nếu tổng các ngày mà nhiều hơn 11 mã hàng thì lại phải thay lại. => cái này thì dễ xử lý vì chỉ cần đếm số dấu cách +1 là xong.
- cái con số 100, ở bài này nếu tổng các mã hàng từ 34 trở lên thì công thức sẽ không còn đúng nữa (đang tính mỗi mã là 3 ký tự, 3*34=102>100).
Con số 100 này sẽ là khó khăn cho chúng ta lựa chọn, vì nếu chọn lớn thì khi có nhiều mã, chúng ta REPT lên thì giá trị sẽ vượt quá 32,767 ký tự, công thức sẽ báo lỗi, còn nếu chọn nhỏ thì sẽ bị tình trạng trên khi có nhiều mã hàng.
Công thức tại G4:
G4=UNIQUE(SORT(FILTERXML("<p><i>"&SUBSTITUTE(TEXTJOIN(",",,$C$4:$C$7),",","</i><i>")&"</i></p>","//i")))
 
Web KT

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

Back
Top Bottom