Sumproduct 从不同月份列中的最旧月份减去总金额
Sumproduct subtract total amount from oldest month in different month columns
我有 4 个不同的数据库列
╔════╦════════════╦═════════╦═════════════╦═════════════╗
║ ║ A ║ B ║ C ║ D ║
╠════╬════════════╬═════════╬═════════════╬═════════════╣
║ 1 ║ Date ║ Party ║ Debit ║ Credit ║
║ 2 ║ 25-12-2019 ║ John ║ 50,000 ║ ║
║ 3 ║ 27-12-2019 ║ Neil ║ 50,000 ║ ║
║ 4 ║ 29-12-2019 ║ John ║ 1,00,000 ║ ║
║ 5 ║ 01-Jan ║ Neil ║ 50,000 ║ ║
║ 6 ║ 05-Jan ║ John ║ 8,00,000 ║ ║
║ 7 ║ 08-Jan ║ John ║ 70,000 ║ ║
║ 8 ║ 28-Jan ║ Neil ║ 20,000 ║ ║
║ 9 ║ 02-Feb ║ John ║ 30,000 ║ ║
║ 10 ║ 15-Feb ║ Neil ║ 19,000 ║ ║
║ 11 ║ 27-Feb ║ John ║ 21,000 ║ ║
║ 12 ║ 04-Mar ║ John ║ 22,000 ║ ║
║ 13 ║ 08-Mar ║ Neil ║ 88,000 ║ ║
║ 14 ║ 09-Mar ║ John ║ 6,00,000 ║ ║
║ 15 ║ 05-Apr ║ John ║ 7,05,000 ║ ║
║ 16 ║ 21-Apr ║ Rebbika ║ 25,00,000 ║ ║
║ 17 ║ 05-May ║ John ║ ║ 7,00,000 ║
║ 18 ║ 07-May ║ Neil ║ ║ 5,00,000 ║
║ 19 ║ 19-May ║ John ║ ║ 1,00,000 ║
║ 20 ║ 21-May ║ Rebbika ║ ║ 10,00,000 ║
╚════╩════════════╩═════════╩═════════════╩═════════════╝
这是结果table(这实际上是每个月余额的试用
╔═══╦═════════╦════════╦════════╦═══════╦════════╦═════════╗
║ ║ E ║ F ║ G ║ H ║ I ║ J ║
╠═══╬═════════╬════════╬════════╬═══════╬════════╬═════════╣
║ 1 ║ Party ║ Dec-19 ║ Jan-20 ║ Feb-20║ Mar-20 ║ Apr-20 ║
║ 2 ║ John ║ - ║ 220000 ║ 51000 ║ 622000 ║ 705000 ║
║ 3 ║ Neil ║ 10000 ║ 70000 ║ 19000 ║ 88000 ║ 0 ║
║ 4 ║ Rebbika ║ - ║ - ║ - ║ - ║ 1500000 ║
╚═══╩═════════╩════════╩════════╩═══════╩════════╩═════════╝
这是我在 E2 到 J4 中使用的公式。
我复制的公式来自Cell I2
=IF(SUMPRODUCT(--(MONTH($A:$A)=12)+--(MONTH($A:$A)<=2),--($B:$B=F3),$C:$C)-SUMIF($B:$B,F3,$D:$D)>1,SUMPRODUCT(--(MONTH($A:$A)=3),--($B:$B=F3),$C:$C),IF(SUMPRODUCT(--(MONTH($A:$A)=3),--($B:$B=F3),$C:$C)-(SUMIF($B:$B,F3,$D:$D)-SUMPRODUCT(--(MONTH($A:$A)=12)+--(MONTH($A:$A)<=2),--($B:$B=F3),$C:$C))<1,"",SUMPRODUCT(--(MONTH($A:$A)=3),--($B:$B=F3),$C:$C)-(SUMIF($B:$B,F3,$D:$D)-SUMPRODUCT(--(MONTH($A:$A)=12)+--(MONTH($A:$A)<=2),--($B:$B=F3),$C:$C))))
例如:-
12 月付给 John 的总付款额为 150,000
收到的付款与月份或日期无关,它只是截至该日期我们收到的全部付款
所以,如果他付给我们120,000
12 月的余额=30,000,1 月-2 月-3 月...到期付款仍未完成
如果我们已收到总付款 1,021,000
然后它将清除 12 月的 150,000 和 1 月的 870,000,以及 2 月的 1,000,并将 Dec 列显示为 Nill,Jan=Nill,Feb 50,000
应从最早的结算月份中减去收到金额的总和
但是我使用的函数真的很乱,让 sheet 有点重,有没有更短更好的方法来执行这个任务而不使用 vba 代码但公式比我正在尝试的那个。它的 MS 2007
任何帮助将不胜感激
我终于明白了
=IFERROR(1/(1/ROUND(MAX(0,SUMIFS($C:$C,$B:$B,$E2,$A:$A,"<="&EOMONTH(F,0))-SUMIF($B:$B,$E2,$D:$D)-SUM($E2:E2)),0)),"-")
垂直和水平拖动它都很好。
我有 4 个不同的数据库列
╔════╦════════════╦═════════╦═════════════╦═════════════╗
║ ║ A ║ B ║ C ║ D ║
╠════╬════════════╬═════════╬═════════════╬═════════════╣
║ 1 ║ Date ║ Party ║ Debit ║ Credit ║
║ 2 ║ 25-12-2019 ║ John ║ 50,000 ║ ║
║ 3 ║ 27-12-2019 ║ Neil ║ 50,000 ║ ║
║ 4 ║ 29-12-2019 ║ John ║ 1,00,000 ║ ║
║ 5 ║ 01-Jan ║ Neil ║ 50,000 ║ ║
║ 6 ║ 05-Jan ║ John ║ 8,00,000 ║ ║
║ 7 ║ 08-Jan ║ John ║ 70,000 ║ ║
║ 8 ║ 28-Jan ║ Neil ║ 20,000 ║ ║
║ 9 ║ 02-Feb ║ John ║ 30,000 ║ ║
║ 10 ║ 15-Feb ║ Neil ║ 19,000 ║ ║
║ 11 ║ 27-Feb ║ John ║ 21,000 ║ ║
║ 12 ║ 04-Mar ║ John ║ 22,000 ║ ║
║ 13 ║ 08-Mar ║ Neil ║ 88,000 ║ ║
║ 14 ║ 09-Mar ║ John ║ 6,00,000 ║ ║
║ 15 ║ 05-Apr ║ John ║ 7,05,000 ║ ║
║ 16 ║ 21-Apr ║ Rebbika ║ 25,00,000 ║ ║
║ 17 ║ 05-May ║ John ║ ║ 7,00,000 ║
║ 18 ║ 07-May ║ Neil ║ ║ 5,00,000 ║
║ 19 ║ 19-May ║ John ║ ║ 1,00,000 ║
║ 20 ║ 21-May ║ Rebbika ║ ║ 10,00,000 ║
╚════╩════════════╩═════════╩═════════════╩═════════════╝
这是结果table(这实际上是每个月余额的试用
╔═══╦═════════╦════════╦════════╦═══════╦════════╦═════════╗
║ ║ E ║ F ║ G ║ H ║ I ║ J ║
╠═══╬═════════╬════════╬════════╬═══════╬════════╬═════════╣
║ 1 ║ Party ║ Dec-19 ║ Jan-20 ║ Feb-20║ Mar-20 ║ Apr-20 ║
║ 2 ║ John ║ - ║ 220000 ║ 51000 ║ 622000 ║ 705000 ║
║ 3 ║ Neil ║ 10000 ║ 70000 ║ 19000 ║ 88000 ║ 0 ║
║ 4 ║ Rebbika ║ - ║ - ║ - ║ - ║ 1500000 ║
╚═══╩═════════╩════════╩════════╩═══════╩════════╩═════════╝
这是我在 E2 到 J4 中使用的公式。 我复制的公式来自Cell I2
=IF(SUMPRODUCT(--(MONTH($A:$A)=12)+--(MONTH($A:$A)<=2),--($B:$B=F3),$C:$C)-SUMIF($B:$B,F3,$D:$D)>1,SUMPRODUCT(--(MONTH($A:$A)=3),--($B:$B=F3),$C:$C),IF(SUMPRODUCT(--(MONTH($A:$A)=3),--($B:$B=F3),$C:$C)-(SUMIF($B:$B,F3,$D:$D)-SUMPRODUCT(--(MONTH($A:$A)=12)+--(MONTH($A:$A)<=2),--($B:$B=F3),$C:$C))<1,"",SUMPRODUCT(--(MONTH($A:$A)=3),--($B:$B=F3),$C:$C)-(SUMIF($B:$B,F3,$D:$D)-SUMPRODUCT(--(MONTH($A:$A)=12)+--(MONTH($A:$A)<=2),--($B:$B=F3),$C:$C))))
例如:- 12 月付给 John 的总付款额为 150,000
收到的付款与月份或日期无关,它只是截至该日期我们收到的全部付款 所以,如果他付给我们120,000
12 月的余额=30,000,1 月-2 月-3 月...到期付款仍未完成
如果我们已收到总付款 1,021,000
然后它将清除 12 月的 150,000 和 1 月的 870,000,以及 2 月的 1,000,并将 Dec 列显示为 Nill,Jan=Nill,Feb 50,000
应从最早的结算月份中减去收到金额的总和
但是我使用的函数真的很乱,让 sheet 有点重,有没有更短更好的方法来执行这个任务而不使用 vba 代码但公式比我正在尝试的那个。它的 MS 2007
任何帮助将不胜感激
我终于明白了
=IFERROR(1/(1/ROUND(MAX(0,SUMIFS($C:$C,$B:$B,$E2,$A:$A,"<="&EOMONTH(F,0))-SUMIF($B:$B,$E2,$D:$D)-SUM($E2:E2)),0)),"-")
垂直和水平拖动它都很好。