Bạn thử cách làm của File này xem có giúp được bạn không ?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ử: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
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
Làm tay chạy nhanh sao bằng code được bác.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.
View attachment 247916
View attachment 247917
Tôi quen làm việc trâu bò rồi.Làm tay chạy nhanh sao bằng code được bác.
MS | MÓN ĂN | SỐ LƯỢNG | Mã NL | NGUYÊN LIỆU | ĐVT | ĐỊNH LƯỢNG | |||
A01 | Thịt kho củ cải | 1000 | He000 | heo | kg | 60 | |||
A01 | CC000 | củ cải | kg | 28 | |||||
A01 | Tu000 | tiêu | kg | 0 | |||||
A01 | HL000 | hành lá | kg | 0 | |||||
A02 | THỊT KHO MĂNG | 200 | He000 | heo | kg | 12 | |||
A02 | MT000 | măng tước sợi | kg | 8 | |||||
A02 | Tu000 | tiêu | kg | 0 | |||||
A02 | HL000 | hành lá | kg | 0 | |||||
A01 | Thịt kho củ cải | 200 | He000 | heo | kg | 12 | |||
A01 | CC000 | củ cải | kg | 5.6 | |||||
A01 | Tu000 | tiêu | kg | 0 | |||||
AA1 | HL000 | hành lá | kg | 0 | |||||
H03 | Heo kho củ | 10 | He000 | heo | kg | 0.6 | |||
H03 | Cu000 | củ | kg | 0 | |||||
H03 | Tu000 | tiêu | kg | 0 | |||||
H03 | HL000 | hành lá | kg | 0 |
Gợi ý hào hứng thật.Chủ bài đăng nên thiết kế lại CSDL, mình xin gợi ý:...
Giống như làm tay ở bài #5.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?
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?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á.
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ứ:Dim sArr(), dArr(), Dic As Object, Tmp$, R&, P&, I&, J&, K&
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ếtThấ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.
Viết kiểu bien& thì trượt từ vòng gửi xe.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
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)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ệ.