Phân bổ số tiền hóa đơn cho phiếu thu tiền

Liên hệ QC

queluatb

Thành viên thường trực
Tham gia
17/1/11
Bài viết
345
Được thích
41
Em có file phân bổ số tiền của hóa đơn xuất theo ngày với số tiền thu được từ chuyển khoản, phần còn lại sẽ thu bằng phiếu thu tiền mặt, trong file em có mô tả lại một số trường hợp hiện tại em đang phát sinh và kết quả mong muốn
Nhờ anh/chi viết giúp em code cho file
Em xin cám ơn!
 

File đính kèm

  • Phan bo so tien.xlsx
    12.8 KB · Đọc: 25
Em có file phân bổ số tiền của hóa đơn xuất theo ngày với số tiền thu được từ chuyển khoản, phần còn lại sẽ thu bằng phiếu thu tiền mặt, trong file em có mô tả lại một số trường hợp hiện tại em đang phát sinh và kết quả mong muốn
Nhờ anh/chi viết giúp em code cho file
Em xin cám ơn!
Không hiểu rỏ giải thích cách tinh, đoán mò
Mã:
N4 =MAX(SUM($I$4:I4)-SUM($K$4:K4)-SUM($L$3:L3),0)
Copy xuống
 
Upvote 0
Em xin cám ơn sự giúp đỡ của anh, để rõ hơn nhờ anh xem giúp công thức em đang tính vo tay ở cột phiếu thu ạ
Hiểu hơn tí . .
Mã:
L4 =MAX(SUM(I$4:I4)-SUM(K$4:K4)-SUM(L$3:L3)+(I5-K5)*(I5<K5),0)
Trường hợp 2 và 3 nếu có nhiều dòng phía dưới thỏa thì sao?
 
Lần chỉnh sửa cuối:
Upvote 0
Thử xem.
Mã:
O4=MAX(SUM($I4:$I$34)-SUM($K4:$K$34)-SUM(O5:O$35)-MAX(SUM($K$3:$K3)-SUM($I$3:$I3),0),0)
Lưu ý: Nhập công thức cho hết các ô trong cột mới ra kết quả đúng.
 
Upvote 0
Nếu thích dùng code VBA
Mã:
Sub ABC()
  Dim arr(), res(), thu#, t#, sRow&, i&, r&
 
  With Sheets("Sheet4")
    arr = .Range("I4:K" & .Range("H" & Rows.Count).End(xlUp).Row).Value
  End With
  sRow = UBound(arr)
  ReDim res(1 To sRow, 1 To 1)
  For i = 1 To sRow
    thu = thu + arr(i, 1) - arr(i, 3)
    If thu > 0 Then
      For r = i + 1 To sRow
        If arr(r, 1) < arr(r, 3) Then
          t = arr(r, 3) - arr(r, 1)
          If t > thu Then t = thu
          thu = thu - t
          arr(r, 3) = arr(r, 3) - t
        Else
          Exit For
        End If
      Next r
      res(i, 1) = thu
      thu = 0
    End If
  Next i
  Sheets("Sheet4").Range("L4").Resize(sRow) = res
End Sub
 
Upvote 0
Dùng công thức trên được không?
Em cám ơn anh, công thức dùng được a
Bài đã được tự động gộp:

Thử xem.
Mã:
O4=MAX(SUM($I4:$I$34)-SUM($K4:$K$34)-SUM(O5:O$35)-MAX(SUM($K$3:$K3)-SUM($I$3:$I3),0),0)
Lưu ý: Nhập công thức cho hết các ô trong cột mới ra kết quả đúng.
Vâng, em cám ơn anh
 
Upvote 0
Nếu thích dùng code VBA
Mã:
Sub ABC()
  Dim arr(), res(), thu#, t#, sRow&, i&, r&
 
  With Sheets("Sheet4")
    arr = .Range("I4:K" & .Range("H" & Rows.Count).End(xlUp).Row).Value
  End With
  sRow = UBound(arr)
  ReDim res(1 To sRow, 1 To 1)
  For i = 1 To sRow
    thu = thu + arr(i, 1) - arr(i, 3)
    If thu > 0 Then
      For r = i + 1 To sRow
        If arr(r, 1) < arr(r, 3) Then
          t = arr(r, 3) - arr(r, 1)
          If t > thu Then t = thu
          thu = thu - t
          arr(r, 3) = arr(r, 3) - t
        Else
          Exit For
        End If
      Next r
      res(i, 1) = thu
      thu = 0
    End If
  Next i
  Sheets("Sheet4").Range("L4").Resize(sRow) = res
End Sub
Code chạy quá hay anh ơi, em cám ơn nhiều
 
Upvote 0
Web KT
Back
Top Bottom