|
本帖最后由 西贝木一 于 2015-12-2 11:12 编辑
大家好!现有一应收账款余额计算问题弄了好久,函数无法解决,能不能用自定义函数或VBA啊?请大家帮忙看看,谢谢!主要是应收账款余额(橙色部分)计算出错,如果期初余额和当月销售回款都是正数,则应收账款余额计算无误,如果有负数(比如退货),则计算出错。具体见附件
计算方法是:期初余额+当月销售-当月回款=期末余额,比如下表中9月期初余额是2000,10月份销售1100,回款2500元,那先冲减9月期初余额2000,减至为零,回款还剩余2500-2000=500,这500元再冲减10月销售500元,还剩1100-500=600元.对账结账日 | 客户编码 | 客户名称 | 业务员/跟单员 | 期初余额 | 销售对账金额 | 回款对账金额 | 期末对账单余额 | 2015年9月 | 2.012 | HTC | 刘佳 | 2000.00 |
| | 0.00 | 2015年10月 | 2.012 | HTC | 刘佳 | | 1100 | 2500 | 600.00 | 但也有些特殊的情况不好处理,比如下表中期初余额、销售金额和回款金额为负数时,回款为负数等于是退款,5月期初余额为-1000,6月销售(退货)-500,回款-100,则5月期末余额为-1000--100=-900,6月期末余额应为-500。如果6月回款为100(正数),则5月期末余额为-1000-100=-1100,6月末余额为-500.对账结账日 | 客户编码 | 客户名称 | 业务员/跟单员 | 期初余额 | 销售对账金额 | 回款对账金额 | 期末对账单余额 | 2015年5月 | 2.001 | 步步高 | 张倩 | -1000.00 |
| | -900 | 2015年6月 | 2.001 | 步步高 | 张倩 | | -500 | -100 | -500
|
- Sub 计算()
- arr = Range("a4:h" & [a65536].End(3).Row)
- For i = 1 To UBound(arr) - 1
- For j = i + 1 To UBound(arr)
- If arr(j, 2) <> arr(i, 2) Then Exit For
- Next
- s = i: e = j - 1 '相同客户的起止行
- For k = s To e
- arr(k, 8) = arr(k, 5) + arr(k, 6) - arr(k, 7)
- Next
- If e > s Then
- xsum = arr(s, 5) + arr(s, 6) - arr(s, 7) + arr(e, 5) + arr(e, 6) - arr(e, 7)
- p = arr(s, 5) - arr(e, 7)
- arr(s, 8) = p
- If arr(s, 5) > 0 And p <= 0 Then arr(s, 8) = 0
- arr(e, 8) = xsum - arr(s, 8)
- End If
- i = e
- Next
- Range("h4:h" & [a65536].End(3).Row) = Application.Index(arr, , 8)
- End Sub
复制代码
|
|