Vba 在excel中自动对账

Vba 在excel中自动对账,vba,excel,excel-2007,Vba,Excel,Excel 2007,我有一份三栏的电子表格。第一列包含人名。第二列包含日期。第三列包含该日期收到的金额和支付的发票 例如: 我试图用收到的付款(负值)抵消发票(正值)。如果我使用后进先出应用程序,那么第一个条目的净值将为500美元。第二个条目的净值将为零 有谁能建议一种使这个练习自动化的方法吗。我已经写了一份if声明,但当付款超过发票时,该条件不成立(客户收到预付款的情况) 提前谢谢 这就是最终表格的外观 NAME DATE AMOUNT NET VALUE abc 1-Jan-12 (4,9

我有一份三栏的电子表格。第一列包含人名。第二列包含日期。第三列包含该日期收到的金额和支付的发票

例如:

我试图用收到的付款(负值)抵消发票(正值)。如果我使用后进先出应用程序,那么第一个条目的净值将为500美元。第二个条目的净值将为零

有谁能建议一种使这个练习自动化的方法吗。我已经写了一份if声明,但当付款超过发票时,该条件不成立(客户收到预付款的情况)

提前谢谢

这就是最终表格的外观

NAME    DATE    AMOUNT  NET VALUE
abc 1-Jan-12     (4,910.00)  (4,910.00)
abc 2-Jan-12     3,674.00    (26.00)
abc 16-Jan-12    1,777.00    -   
abc 17-Jan-12    (5,477.00)  -   
abc 22-Mar-12    258.00      258.00 
abc 31-Mar-12    5,502.00    1,465.00 
abc 7-May-12     3,986.00    -   
abc 20-May-12    5,238.00    -   
abc 23-May-12    (6,861.00)  -   
abc 4-Jul-12     (6,400.00)  -   
abc 9-Aug-12     2,238.00    2,238.00 
abc 21-Aug-12    4,855.00    2,456.00 
abc 26-Aug-12    (2,399.00)  -   
abc 9-Sep-12     3,938.00    3,938.00 

很抱歉,各位混淆了…

假设您将值列为实际货币金额,而不是示例中的文本类型,您可以使用
SUMIF
来保持帐户的运行总计

在D2中:

=SUMIF($A$2:A2,A2,$C$2:C2)
把它抄下来。它将显示帐户状态的运行总计,并在a列中记录与名称相关的项目,而不是所有名称

对于您的示例,结果如下:

Name date      amount    Running Total
abc  1-Jan-12  $2,000    2000
abc  2-Jan-12  ($1,500)  500
abc  3-Jan-12  $2,000    2500
abc  3-Jan-12  $2,000    4500
abc  3-Jan-12  ($3,500)  1000
后进先出表的反向格式-将第一个公式放在最后一个单元格(示例中为D6)

向上复制,得到如下结果:

Name date      amount    Running Total
abc  3-Jan-12  ($3,500)  1000
abc  3-Jan-12  $2,000    4500
abc  3-Jan-12  $2,000    2500
abc  2-Jan-12  ($1,500)  500
abc  1-Jan-12  $2,000    2000

总金额由该行及以下金额组成。

是否要平衡每张发票?如果是这样,您需要一个包含所有发票的单独表格,然后可以为每个发票名称/id计算总余额/剩余余额

我可能只会使用一个数据透视表,在工作簿更改时刷新该数据透视表:

至少对于一个小规模的excel对账项目,我会这样做。希望能有帮助。祝你好运

另一种方法是,要创建唯一发票的列表,可以使用ctrl+shift+enter输入的数组公式:

=IFERROR(INDEX($A$2:$A$20, MATCH(0, COUNTIF($E$1:E1, $A$2:$A$20), 0)),"")

然后,您只需对每个发票ID执行SUMIF:

=SUMIF($A$2:$A$22,E2,$C$2:$C$22)

你到底想做什么?确保每个人的记录在某个日期平衡?我有点困惑-你希望最终结果是什么样的。。。只要证明这一点,然后我们可以创建一个公式来实现这一点……最终结果将是,例如,第一行的净金额为500,第二行的净结果为0。然后第三个值将为500,后跟0和0。由于我需要使用后进先出法,我将从下到上移动。名称日期金额净值abc 2012年1月1日(4910.00)(4910.00)abc 2012年1月2日3674.00(26.00)abc 2012年1月16日1777.00-abc 2012年1月17日(5477.00)-美国广播公司2012年3月22日258.00 258.00美国广播公司2012年3月31日5502.00 1465.00美国广播公司2012年5月7日3986.00美国广播公司2012年5月20日5238.00美国广播公司2012年5月23日(6861.00)-美国广播公司2012年7月4日(6400.00)-美国广播公司2012年8月9日2238.00 2238.00美国广播公司2012年8月21日4855.00 2456.00美国广播公司2012年8月26日(2399.00)-abc 2012年9月9日3938.00 3938.00关于您的以下评论和您的新编辑-账龄发票与对账发票完全不同。我不知道你为什么会使用后进先出法,除非你在处理库存(看起来你不是)。你似乎用了错误的术语来提问。在这里的任何人都能帮助你之前,你会想弄清楚你到底想做什么。从你的数学来看,不清楚你想做什么。祝你好运。不过,要使用后进先出系统,你必须从下到上,或者,您必须按最晚日期对日期进行排序,并使用此公式。@ScottHoltzman我使用的是后进先出系统,因此我们必须从下至上。最终结果将是,例如,第一行的净额为500,第二行的净额为0。然后第三个值将为500,后跟0和0。因为我需要使用后进先出法,所以我从下到上移动。我不知道你会如何得到这些答案。你可能需要更明确地说明你需要的总额是的,我想要每张发票的余额。最终输出如下:第一行的净额为500,第二行的净额为0。然后第三个值将为500,后跟0和0。我被要求使用后进先出应用程序,这意味着我必须自下而上的发票。谢谢我不确定我是否理解你的数学(或者在你的一些其他评论中-为什么你不在你的问题中展示你想要的作为例子)-但是看起来肖恩的答案更接近你想要的。嘿,对不起,刚才的帖子。我想做的是在每个行项目的金额旁边获得未付金额。。。因此,示例应类似于abc 1-jan-12 2000 USD 500 USD,下一行将有abc 2-jan-12(1500 USD)0 USD。每张发票的净值是我所需要的。。。。我有付款和发票的累计总额,但我需要对发票和付款/预付款的剩余价值进行账龄分析,因为CASE可能是。。。我必须使用后进先出的会计方法,所以我要从下到上。是的,我理解这一部分-但为什么下一行是零-用你的逻辑,它不是2500(因为后一行是2000)?此外,后进先出用于库存管理-我从来没有听说过它被用于发票对账。所以,我有点搞不懂你想要的是什么。
=IFERROR(INDEX($A$2:$A$20, MATCH(0, COUNTIF($E$1:E1, $A$2:$A$20), 0)),"")
=SUMIF($A$2:$A$22,E2,$C$2:$C$22)