Chào các bạn, mình đang lập một báo cáo kho theo kỳ (có thể theo tuần, hoặc bất cứ khoảng thời gian nào sếp muốn) nhưng loay hoay mãi mà không được. Mình xin mạn phép đưa file lên nhờ các bác giúp đỡ.
Xin chân thành cảm ơn!
Dữ liệu của bạn ngộ thiệt.
1/ Thường thì người ta tổng theo Mã hàng, đàng này mã hàng lại có số 0 cho nhiều tên hàng.
2/ Tính tổng theo tên hàng thì có bảo đảm tên hàng nhập hoàn toàn chính xác như nhau không? khác nhau 1 khoảng cách coi như khác nhau rồi.
3/ Yêu cầu nói theo vùng tô màu mà chẳng thấy ô nào có màu.
4/ Làm bằng công thức cũng được nhưng oải lắm, làm bằng VBA được không?
Nếu được thì xem file này, Enable Macros khi mở file, Nhập từ ngày đến ngày trong B3 và B4, Bấm nút <GPE> sẽ có số liệu trong cột E,F
5/ Số liệu trong các cột khác (Tồn đầu kỳ, Cuối kỳ) code không đụng tới.
[GPECODE=vb]Public Sub QuaiChieu()
Dim Dic As Object, sArr(), dArr(), Ngay(), I As Long, K As Long, Tem As String, Ngay1 As Long, Ngay2 As Long
Set Dic = CreateObject("Scripting.Dictionary")
With Sheet1
sArr = .Range(.[B7], .[B65536].End(xlUp)).Value2
Ngay1 = .[B3].Value2
Ngay2 = .[B4].Value2
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 2)
For I = 1 To UBound(sArr, 1)
K = K + 1
Tem = UCase(sArr(I, 1))
If Not Dic.Exists(Tem) Then Dic.Add Tem, K
Next I
With Sheet2
Ngay = .Range(.[A4], .[A65536].End(xlUp)).Value2
sArr = .Range(.[F4], .[F65536].End(xlUp)).Resize(, 3).Value2
End With
For I = 1 To UBound(sArr, 1)
If Ngay(I, 1) >= Ngay1 And Ngay(I, 1) <= Ngay2 Then
Tem = UCase(sArr(I, 1))
If Dic.Exists(Tem) Then
dArr(Dic.Item(Tem), 1) = dArr(Dic.Item(Tem), 1) + sArr(I, 2)
dArr(Dic.Item(Tem), 2) = dArr(Dic.Item(Tem), 2) + sArr(I, 3)
End If
End If
Next I
Sheet1.[E7:F7].Resize(K) = dArr
Set Dic = Nothing
End Sub[/GPECODE]