Tìm kiếm dữ liệu tồn kho cuối ngày

Liên hệ QC

Phamanh1998

Thành viên thường trực
Tham gia
12/6/20
Bài viết
267
Được thích
41
Giới tính
Nữ
Em chào Anh/Chị. Em đang có một bài toàn liên quan đến việc xác định dữ liệu tồn kho đầu ngày và cuối ngày mong được anh chị giúp đỡ ạ.
Danh sách bảng bên trái nhập hàng ngày. Bảng bên phải khi gõ khoảng thời gian cần truy xuất dữ liệu thì sẽ trả về số lượng tồn đầu ngày, và kết tồn kho cuối ngày duy duy nhất còn lại tương ứng với tùng sản phẩm, khách hàng, số phiếu.1688800981543.png
 

File đính kèm

  • Gia trị ton kho 2023.xlsx
    12.5 KB · Đọc: 12
Dùng công thức lần lượt tại N4, O4, P4, Q4 :
Mã:
=SUMIFS($G$4:$G$23,$E$4:$E$23,$M4,$D$4:$D$23,$L4,$C$4:$C$23,$K4,$F$4:$F$23,$O$3,$B$4:$B$23,"<"&$N$2)-SUMIFS($G$4:$G$23,$E$4:$E$23,$M4,$D$4:$D$23,$L4,$C$4:$C$23,$K4,$F$4:$F$23,$P$3,$B$4:$B$23,"<"&$N$2)
Mã:
=SUMIFS($G$4:$G$23,$E$4:$E$23,$M4,$D$4:$D$23,$L4,$C$4:$C$23,$K4,$F$4:$F$23,O$3,$B$4:$B$23,">="&$N$2,$B$4:$B$23,"<="&$Q$2)
Mã:
=SUMIFS($G$4:$G$23,$E$4:$E$23,$M4,$D$4:$D$23,$L4,$C$4:$C$23,$K4,$F$4:$F$23,P$3,$B$4:$B$23,">="&$N$2,$B$4:$B$23,"<="&$Q$2)
Mã:
=N4+O4-P4
 

File đính kèm

  • Gia trị ton kho 2023.xlsx
    18.8 KB · Đọc: 8
- Nếu ra kết quả như mong muốn thì Cell P3 không phải là tồn đầu ngày đâu mà tồn cuối ngày.
 
Dùng công thức lần lượt tại N4, O4, P4, Q4 :
Mã:
=SUMIFS($G$4:$G$23,$E$4:$E$23,$M4,$D$4:$D$23,$L4,$C$4:$C$23,$K4,$F$4:$F$23,$O$3,$B$4:$B$23,"<"&$N$2)-SUMIFS($G$4:$G$23,$E$4:$E$23,$M4,$D$4:$D$23,$L4,$C$4:$C$23,$K4,$F$4:$F$23,$P$3,$B$4:$B$23,"<"&$N$2)
Mã:
=SUMIFS($G$4:$G$23,$E$4:$E$23,$M4,$D$4:$D$23,$L4,$C$4:$C$23,$K4,$F$4:$F$23,O$3,$B$4:$B$23,">="&$N$2,$B$4:$B$23,"<="&$Q$2)
Mã:
=SUMIFS($G$4:$G$23,$E$4:$E$23,$M4,$D$4:$D$23,$L4,$C$4:$C$23,$K4,$F$4:$F$23,P$3,$B$4:$B$23,">="&$N$2,$B$4:$B$23,"<="&$Q$2)
Mã:
=N4+O4-P4
Anh cho phép em hỏi thêm chút là nếu các cell tại các cột K,L,M không cho trước như vậy mà sẽ biến động khi ta gõ thời gian cụ thể vào thì sẽ dùng công thức gì ạ ?
 
Anh cho phép em hỏi thêm chút là nếu các cell tại các cột K,L,M không cho trước như vậy mà sẽ biến động khi ta gõ thời gian cụ thể vào thì sẽ dùng công thức gì ạ ?
Có nghĩa bạn muốn khi nhập thời gian vào chỉ có phát sinh nhập và xuất thì sẽ hiện thị tên 3 cột K, L, M đúng ko ?
 
Lần chỉnh sửa cuối:
Anh cho phép em hỏi thêm chút là nếu các cell tại các cột K,L,M không cho trước như vậy mà sẽ biến động khi ta gõ thời gian cụ thể vào thì sẽ dùng công thức gì ạ ?
Góp vui thêm 1 phương án: dùng VBA:
Mã:
Option Explicit

Sub Ton()
    Dim i&, j&, Lr&, t&, k&
    Dim Arr(), KQ(), LuyKeNhap(), LuyKeXuat()
    Dim Dic As Object, Key
    Dim Sh As Worksheet
    Dim sDay, eDay
Set Sh = Sheets("BanhKH")
sDay = Sh.[N2].Value: eDay = Sh.[Q2].Value
Set Dic = CreateObject("Scripting.Dictionary")
Lr = Sh.Cells(Rows.Count, 2).End(xlUp).Row
Arr = Sh.Range("A4:H" & Lr).Value
ReDim KQ(1 To UBound(Arr), 1 To 7)
ReDim LuyKeNhap(1 To UBound(Arr), 1 To 1)
ReDim LuyKeXuat(1 To UBound(Arr), 1 To 1)
For i = 1 To UBound(Arr)
    Key = Arr(i, 3) & "#" & Arr(i, 4) & "#" & Arr(i, 5)
    If Not Dic.Exists(Key) Then
        t = t + 1: Dic.Add (Key), t
        KQ(t, 1) = Arr(i, 3): KQ(t, 2) = Arr(i, 4): KQ(t, 3) = Arr(i, 5)
'-----phân tính tôn kho trươc ngày đa ghi ơ ô N2
        If Arr(i, 2) < sDay Then
            If Arr(i, 6) Like "Nh?p" Then LuyKeNhap(t, 1) = Arr(i, 7)
            If Arr(i, 6) Like "Xu?t" Then LuyKeXuat(t, 1) = Arr(i, 7)
                KQ(t, 4) = (LuyKeNhap(t, 1) - LuyKeXuat(t, 1))
        End If
'------phan tinh phát sinh trong khoang tu N2 đên Q2
        If (Arr(i, 2) >= sDay Or Arr(i, 2) <= eDay) And Arr(i, 6) Like "Nh?p" Then KQ(t, 5) = Arr(i, 7)
        If Arr(i, 2) <= eDay And Arr(i, 6) Like "Xu?t" Then KQ(t, 6) = Arr(i, 7)
'------Tinh tôn trong ngay theo Mahang, khách hàng,
            KQ(t, 7) = KQ(t, 4) + KQ(t, 5) - KQ(t, 6)
    Else
        k = Dic.Item(Key)
        If Arr(i, 2) < sDay Then
            If Arr(i, 6) Like "Nh?p" Then LuyKeNhap(k, 1) = LuyKeNhap(k, 1) + Arr(i, 7)
            If Arr(i, 6) Like "Xu?t" Then LuyKeXuat(k, 1) = LuyKeXuat(k, 1) + Arr(i, 7)
                KQ(k, 4) = KQ(k, 4) + (LuyKeNhap(k, 1) - LuyKeXuat(k, 1))
        End If
        If (Arr(i, 2) >= sDay Or Arr(i, 2) <= eDay) And Arr(i, 6) Like "Nh?p" Then KQ(k, 5) = KQ(k, 5) + Arr(i, 7)
        If Arr(i, 2) <= eDay And Arr(i, 6) Like "Xu?t" Then KQ(k, 6) = KQ(k, 6) + Arr(i, 7)
        KQ(k, 7) = KQ(k, 4) + KQ(k, 5) - KQ(k, 6)
    End If
        
Next i
    If t Then
        Sh.Range("K15").Resize(10000, 7).ClearContents
        Sh.Range("K15").Resize(t, 7) = KQ
    End If
    Set Dic = Nothing
MsgBox " Thành công"
End Sub
Thay đổi N2 và Q2 sau đó nhấn nút " Chay code" để xem kết quả trả về Từ K12.
 

File đính kèm

  • Gia trị ton kho 2023.xlsm
    23 KB · Đọc: 15
Thử kiểm tra file đúng ý chưa :
Chào Anh!
Nếu có thể, nhờ anh giải thích giúp em ý nghĩa của các hàm anh đã dùng ở cột K,L,M được không?
Em mong muốn được học.
Xin cảm ơn!
IFERROR(@INDEX(C$4:C$23,AGGREGATE(15,6,ROW($1:$23)/($B$4:$B$23>=$N$2)/($B$4:$B$23<=$Q$2),ROW(A1))),"")
 
Web KT
Back
Top Bottom