Tính giá hàng xuất theo thứ tự nhập trước thì xuất trước với đơn giá tương ứng hàng nhập

Liên hệ QC

daovanhai4486

Thành viên mới
Tham gia
28/3/17
Bài viết
38
Được thích
4
Mình có 1 file tính giá như sau

Giờ cần tính số tiền cột G tương ứng với số lượng xuất ở cột F

Số lượng cột F phụ thuộc hàng tồn cột H

Mà số lượng hàng tồn cột H sẽ cập nhật hàng ngày ở cột D với nhiều loại giá khác nhau tương ứng ở cột C.

Số lượng xuất ở cột F sẽ được xuất theo thứ tự hàng tồn trước xuất trước. hàng nhập trước xuất trước tương ứng với giá

Ví dụ :ngày 2/5 mình cần xuất 50 cái thì mình sẽ xuất 50 cái trong 100 cái hàng tồn (tồn đầu tiên nhất của cột H) tương ứng giá của 100 cái hàng tồn này là 1000=> G6=50*1000=50000

Ngày 5/5 mình xuất tiếp 250 cái thì G7= 50*100 + 200*1200 (tồn 100 -50 đã xuất ngày 2/5 + 200 cái là của hàng loại hàng nhập tiếp theo của ngày 1/5 tương ứng giá ).

Nhờ mọi người chỉ dẫn giùm với ạ!

Mình xin cảm ơn.
 

File đính kèm

  • tinh12.xlsx
    11.7 KB · Đọc: 10
cột giá là như thế nào vậy bạn, sao lại có 3 kiểu
Bài đã được tự động gộp:

Mình có 1 file tính giá như sau

Giờ cần tính số tiền cột G tương ứng với số lượng xuất ở cột F

Số lượng cột F phụ thuộc hàng tồn cột H

Mà số lượng hàng tồn cột H sẽ cập nhật hàng ngày ở cột D với nhiều loại giá khác nhau tương ứng ở cột C.

Số lượng xuất ở cột F sẽ được xuất theo thứ tự hàng tồn trước xuất trước. hàng nhập trước xuất trước tương ứng với giá

Ví dụ :ngày 2/5 mình cần xuất 50 cái thì mình sẽ xuất 50 cái trong 100 cái hàng tồn (tồn đầu tiên nhất của cột H) tương ứng giá của 100 cái hàng tồn này là 1000=> G6=50*1000=50000

Ngày 5/5 mình xuất tiếp 250 cái thì G7= 50*100 + 200*1200 (tồn 100 -50 đã xuất ngày 2/5 + 200 cái là của hàng loại hàng nhập tiếp theo của ngày 1/5 tương ứng giá ).

Nhờ mọi người chỉ dẫn giùm với ạ!

Mình xin cảm
file của bạn có nhiều tên hàng không
 
Lần chỉnh sửa cuối:
Mình có 1 file tính giá như sau

Giờ cần tính số tiền cột G tương ứng với số lượng xuất ở cột F

Số lượng cột F phụ thuộc hàng tồn cột H

Mà số lượng hàng tồn cột H sẽ cập nhật hàng ngày ở cột D với nhiều loại giá khác nhau tương ứng ở cột C.

Số lượng xuất ở cột F sẽ được xuất theo thứ tự hàng tồn trước xuất trước. hàng nhập trước xuất trước tương ứng với giá

Ví dụ :ngày 2/5 mình cần xuất 50 cái thì mình sẽ xuất 50 cái trong 100 cái hàng tồn (tồn đầu tiên nhất của cột H) tương ứng giá của 100 cái hàng tồn này là 1000=> G6=50*1000=50000

Ngày 5/5 mình xuất tiếp 250 cái thì G7= 50*100 + 200*1200 (tồn 100 -50 đã xuất ngày 2/5 + 200 cái là của hàng loại hàng nhập tiếp theo của ngày 1/5 tương ứng giá ).

Nhờ mọi người chỉ dẫn giùm với ạ!

Mình xin cảm ơn.
Giá xuất kho FIFO thường được xử lý bằng code VBA, trước đây mình có dùng công thức Excel để tính, khá phức tạp vì phải tính cho nhiều loại hàng khác nhau, với file nầy chỉ tính cho 1 loại hàng thì đơn giản hơn tí
Cách tính dựa vào 2 cột phụ và 1 ô trung gian tính thành tiền xuất, nhập lượng xuất ở cột F, Enter, copy ô K4 và dán giá trị vào ô thành tiền
 

File đính kèm

  • tinh12.xlsx
    15.2 KB · Đọc: 29
Cảm ơn bạn nhiều, mà đúng là nhiều loại hàng, file mình chỉ lấy một mã đó thôi. Không biết bạn có thể cho mình code vba nhiều loại được không ạ!
Bài đã được tự động gộp:

cột giá là như thế nào vậy bạn, sao lại có 3 kiểu
Bài đã được tự động gộp:


file của bạn có nhiều tên hàng không
có nhiều loại hàng ạ, file trên mình chỉ lấy có một loại hàng thôi.
 
Cảm ơn bạn nhiều, mà đúng là nhiều loại hàng, file mình chỉ lấy một mã đó thôi. Không biết bạn có thể cho mình code vba nhiều loại được không ạ!
Bài đã được tự động gộp:


có nhiều loại hàng ạ, file trên mình chỉ lấy có một loại hàng thôi.
Vậy dòng đầu kỳ của hàng nào? làm sao biết
 
mình gửi lại file gốc bên mình, dòng đầu kỳ thường chỉ có 1 giá là của tháng trước thôi, nhờ bạn xem giúp mình với nhé.cảm ơn bạn
Chạy code
Mã:
Option Explicit
Sub XYZ()
  Dim sArr(), Res(), xuat#
  Dim sRow&, fR&, eR&, i&, iR&, r&
  With Sheets("bc_sochitiet1")
    i = Range("C" & Rows.Count).End(xlUp).Row
    If i < 12 Then MsgBox "Khong co du lieu!": Exit Sub
    sArr = .Range("C10:M" & i + 1).Value
    Res = .Range("G10:M" & i).Value
  End With
  sRow = UBound(Res)
  For i = 1 To sRow
    If sArr(i, 1) = Empty And sArr(i + 1, 1) <> Empty Then
      fR = i: iR = fR
      If sArr(fR, 10) > 0 Then
        sArr(fR, 5) = sArr(fR, 11) / sArr(fR, 10)
        sArr(fR, 6) = sArr(fR, 10)
      End If
    ElseIf sArr(i, 1) <> Empty Then
      Res(i, 6) = Empty: Res(i, 7) = Empty
      xuat = sArr(i, 8)
      If xuat > 0 Then
        Res(i, 5) = 0
        For r = iR To i - 1
          If sArr(r, 6) >= xuat Then
            Res(i, 5) = Round(Res(i, 5) + xuat * sArr(r, 5), 2)
            Res(i, 1) = Round(Res(i, 5) / Res(i, 4), 5)
            sArr(r, 6) = sArr(r, 6) - xuat
            Exit For
          ElseIf sArr(r, 6) > 0 Then
            Res(i, 5) = Res(i, 5) + sArr(r, 6) * sArr(r, 5)
            xuat = xuat - sArr(r, 6)
            iR = r + 1
          End If
        Next r
      End If
      If sArr(i + 1, 1) = Empty Then
        Res(i + 1, 4) = 0: Res(i + 1, 5) = 0
        For r = fR + 1 To i
          
          Res(r, 6) = Res(r - 1, 6) + Res(r, 2) - Res(r, 4)
          If Res(r, 6) > 0 Then
            Res(r, 7) = Res(r - 1, 7) + Res(r, 3) - Res(r, 5)
          Else
            Res(r, 6) = Empty
          End If
          Res(i + 1, 4) = Res(i + 1, 4) + Res(r, 4) 'Tong
          Res(i + 1, 5) = Res(i + 1, 5) + Res(r, 5) 'Tong
        Next r
        Res(i + 1, 6) = Res(i, 6): Res(i + 1, 7) = Res(i, 7) 'Tong
      End If
    End If
  Next i
  Sheets("bc_sochitiet1").Range("G10").Resize(sRow, 7) = Res
End Sub
 
Chạy code
Mã:
Option Explicit
Sub XYZ()
  Dim sArr(), Res(), xuat#
  Dim sRow&, fR&, eR&, i&, iR&, r&
  With Sheets("bc_sochitiet1")
    i = Range("C" & Rows.Count).End(xlUp).Row
    If i < 12 Then MsgBox "Khong co du lieu!": Exit Sub
    sArr = .Range("C10:M" & i + 1).Value
    Res = .Range("G10:M" & i).Value
  End With
  sRow = UBound(Res)
  For i = 1 To sRow
    If sArr(i, 1) = Empty And sArr(i + 1, 1) <> Empty Then
      fR = i: iR = fR
      If sArr(fR, 10) > 0 Then
        sArr(fR, 5) = sArr(fR, 11) / sArr(fR, 10)
        sArr(fR, 6) = sArr(fR, 10)
      End If
    ElseIf sArr(i, 1) <> Empty Then
      Res(i, 6) = Empty: Res(i, 7) = Empty
      xuat = sArr(i, 8)
      If xuat > 0 Then
        Res(i, 5) = 0
        For r = iR To i - 1
          If sArr(r, 6) >= xuat Then
            Res(i, 5) = Round(Res(i, 5) + xuat * sArr(r, 5), 2)
            Res(i, 1) = Round(Res(i, 5) / Res(i, 4), 5)
            sArr(r, 6) = sArr(r, 6) - xuat
            Exit For
          ElseIf sArr(r, 6) > 0 Then
            Res(i, 5) = Res(i, 5) + sArr(r, 6) * sArr(r, 5)
            xuat = xuat - sArr(r, 6)
            iR = r + 1
          End If
        Next r
      End If
      If sArr(i + 1, 1) = Empty Then
        Res(i + 1, 4) = 0: Res(i + 1, 5) = 0
        For r = fR + 1 To i
         
          Res(r, 6) = Res(r - 1, 6) + Res(r, 2) - Res(r, 4)
          If Res(r, 6) > 0 Then
            Res(r, 7) = Res(r - 1, 7) + Res(r, 3) - Res(r, 5)
          Else
            Res(r, 6) = Empty
          End If
          Res(i + 1, 4) = Res(i + 1, 4) + Res(r, 4) 'Tong
          Res(i + 1, 5) = Res(i + 1, 5) + Res(r, 5) 'Tong
        Next r
        Res(i + 1, 6) = Res(i, 6): Res(i + 1, 7) = Res(i, 7) 'Tong
      End If
    End If
  Next i
  Sheets("bc_sochitiet1").Range("G10").Resize(sRow, 7) = Res
End Sub
Cảm ơn bạn rất nhiều!
 
Web KT
Back
Top Bottom