Lọc dữ liệu và tính toán

Liên hệ QC

Thanh OSM

Thành viên mới
Tham gia
29/1/18
Bài viết
6
Được thích
0
Giới tính
Nam
Em có file tổng hợp nguyên liệu, em cần phải tổng hợp lại và tính tổng số lượng, bác nào giúp em với
Untitled.png
 

File đính kèm

  • tong-hop.xlsx
    11.3 KB · Đọc: 20
Cột nguyên liệu như thế là không tổng hợp chính xác được. Với dữ liệu giả vài dòng này thì không sao nhưng với dữ liệu thật thì rất tùy tiện khi nhập tên nguyên liệu. Do đó phải có mã nguyên liệu kèm theo.

Làm với dữ liệu giả thế này xong, vài bữa thớt đem áp vào dữ liệu thật không được rồi đem lên hỏi nữa sao?
 
Upvote 0

File đính kèm

  • BTH_NGUYÊN PHỤ LIỆU.xlsm
    112.8 KB · Đọc: 15
Upvote 0
Em có file tổng hợp nguyên liệu, em cần phải tổng hợp lại và tính tổng số lượng, bác nào giúp em với
View attachment 247847
Thử:
PHP:
Option Explicit
Sub Hungry()
Dim sArr(), dArr(), Dic As Object, Tmp$, R&, P&, I&, J&, K&
Set Dic = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
    
    With Sheets("Sheet1")
        .Range("I6:N10000").ClearContents
        sArr = .Range("B6", "G" & .Range("B" & .Rows.Count).End(xlUp).Row).Value
        R = UBound(sArr, 1)
        P = UBound(sArr, 2)
        ReDim dArr(1 To R, 1 To P)

        For I = 1 To R
            Tmp = sArr(I, 1) & sArr(I, 4)
            With Dic
                If Not .exists(Tmp) Then
                    K = K + 1
                    .Add (Tmp), K
                    For J = 1 To P
                        dArr(K, J) = sArr(I, J)
                    Next
                Else
                    dArr(.Item(Tmp), 6) = dArr(.Item(Tmp), 6) + sArr(I, 6)
                End If
            End With
        Next
        
        .Range("I6").Resize(K, P) = dArr
    End With
Set Dic = Nothing
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Bài này gặp tôi là làm tay chứ code kiếc gì.
Nhưng mà chắc cốt khoẻ hơn. Có phải viết đâu mà mệt.

Làm tay:
- Copy cả bảng sang tổng hợp.
- Clear cột "số lượng" và "định lượng"
- Remove duplicates
- Dùng công thức SumIf, SumIfs, hoặc đại loại.

1603367603686.png
1603367631073.png
 
Upvote 0
Upvote 0
Chủ bài đăng nên thiết kế lại CSDL, mình xin gợi ý:
:D
MSMÓN ĂNSỐ LƯỢNGMã NLNGUYÊN LIỆUĐVTĐỊNH LƯỢNG
A01Thịt kho củ cải1000He000heokg60
A01CC000củ cảikg28
A01Tu000tiêukg0
A01HL000hành lákg0
A02THỊT KHO MĂNG200He000heokg12
A02MT000măng tước sợikg8
A02Tu000tiêukg0
A02HL000hành lákg0
A01Thịt kho củ cải200He000heokg12
A01CC000củ cảikg5.6
A01Tu000tiêukg0
AA1HL000hành lákg0
H03Heo kho củ10He000heokg0.6
H03Cu000củkg0
H03Tu000tiêukg0
H03HL000hành lákg0
 
Upvote 0
Bác @Hai Lúa Miền Tây có thể chỉ giúp câu lệnh Sql trong trường hợp này (sử dụng ADO) thì viết như thế nào không?
Giống như làm tay ở bài #5.
Gợi ý: remove duplicates tức là GROUP BY Mã. Những cái SUMIF's đều là các aggregate's đi theo Group By.

Lưu ý là SQL dùng để truy vấn CSDL LH. Theo luật CSDL LH thì dữ liệu bài này không đạt chuẩn bậc 2. Vì vậy câu SQL sẽ nhìn hơi kỳ kỳ đối với người quen đọc code SQL.

Mà cái này thì Power Query chứ ai lại ADO. Lỗi thời quá.
 
Lần chỉnh sửa cuối:
Upvote 0
Giống như làm tay ở bài #5.
Gợi ý: remove duplicates tức là GROUP BY Mã. Những cái SUMIF's đều là các aggregate's đi theo Group By.

Lưu ý là SQL dùng để truy vấn CSDL LH. Theo luật CSDL LH thì dữ liệu bài này không đạt chuẩn bậc 2. Vì vậy câu SQL sẽ nhìn hơi kỳ kỳ đối với người quen đọc code SQL.

Mà cái này thì Power Query chứ ai lại ADO. Lỗi thời quá.
Cảm ơn bác, em đang thử làm ADO nhưng Sql chưa từng học qua nên không biết viết, em muốn tìm hiểu vì loay hoay mãi vẫn không viết được. Mà cái không làm được thì lại muốn tìm hiểu bác ạ! Nếu có thể bác chỉ em trọn vẹn câu lệnh luôn được không?
 
Upvote 0
Dim sArr(), dArr(), Dic As Object, Tmp$, R&, P&, I&, J&, K&
Thấy bạn chịu khó và nhanh... Có lẽ tới lúc cần cải tiến một số thứ:
- Đừng viết kiểu như trên, viết thật rõ ràng ấy.
Kiểu đó chỉ hại chính mình thôi, cho dù là làm chơi. Biết đâu đấy có lúc nào đó nhận được lời mời làm gì đó liên quan, vậy ta không nên tự loại bỏ cơ hội của mình.
- Cách lựa / đặt tên biến.
- Cách khai báo biến, hằng số...
---------
Chịu khó bám anh ngay phía trên, cái gì không thích thì bỏ qua nhưng phần code, các chỉ dẫn nên tham khảo.
 
Upvote 0
Thấy bạn chịu khó và nhanh... Có lẽ tới lúc cần cải tiến một số thứ:
- Đừng viết kiểu như trên, viết thật rõ ràng ấy.
Kiểu đó chỉ hại chính mình thôi, cho dù là làm chơi. Biết đâu đấy có lúc nào đó nhận được lời mời làm gì đó liên quan, vậy ta không nên tự loại bỏ cơ hội của mình.
- Cách lựa / đặt tên biến.
- Cách khai báo biến, hằng số...
---------
Chịu khó bám anh ngay phía trên, cái gì không thích thì bỏ qua nhưng phần code, các chỉ dẫn nên tham khảo.
Cảm ơn bác, em sẽ ghi nhận góp ý thay đổi. Nhưng bác cho em hỏi, nếu khai báo "&" thay vì as long thì nó có ảnh hưởng không tốt ở điểm nào? Thật sự em chưa biết
 
Upvote 0
nếu khai báo "&" thay vì as long thì nó có ảnh hưởng không tốt ở điểm nào? Thật sự em chưa biết
Viết kiểu bien& thì trượt từ vòng gửi xe.
Viết bien As Long thì gửi được xe. Nếu không đi xe thì vào được cổng bảo vệ.
Và 10 năm sau mở ra vẫn biết bien là kiểu Long.
Đại khái thế.
 
Upvote 0
Viết kiểu bien& thì trượt từ vòng gửi xe.
Viết bien As Long thì gửi được xe. Nếu không đi xe thì vào được cổng bảo vệ.
Quay trở lại một số thắc mắc của em ở trên, bác có thể chỉ giúp em câu lệnh Sql trong bài trên viết thế nào không ạ (Đã google nhưng loay hoay mãi chưa viết được)
 
Upvote 0
Dữ liệu ở đây không đạt chuẩn. Câu lệnh SQL không rắc rối nhưng cái phần đặt cho mẫu mã (format) kết quả ra đúng ý rất rườm rà.

SELECT MS, MA, FORMAT(SUM(SL), "#") [SL], NL, DVT, SUM(DL) [DL]
From (......)
GROUP BY MS, MA, NL, DVT
ORDER BY MS Asc, MA Desc, NL Asc
 
Upvote 0
Dữ liệu này dùng Power Query Fill column và group by là ra cái một. Chính vì dữ liệu chưa chuẩn nên mới cần Power query chứ không thì chỉ cần Pivot table
 
Upvote 0
Web KT
Back
Top Bottom