在对帐组合的数量未知的情况下对两个数据集/集合进行对帐

时间:2018-12-20 00:13:13

标签: vba algorithm excel-vba

因此,我担任会计顾问。我的任务之一是协调数据集之间的事务。程序集之间的一对一匹配很容易解决。我基本上将数据转储到两个单独的数组中,并开始使用嵌套的for循环检查匹配项。
我的问题是,在运行时不知道任一数据集中的事务数时如何协调事务。此外,交易的总和在两端必须相等。
就是

DataSet #1    DataSet #2
A/%/k  $11    A/%/k  $22
A/%/k  $11    A/%/k  $33
A/%/k  $11
A/%/k  $11
A/%/k  $11

上面,不要对(A),(%)或(k)感到困惑。如果您愿意的话,这些只是识别主键。就是它们是匹配的合同号,发票号等。重要的是,在数据集1中,有5笔交易总计$ 55。在数据集2中,有2笔交易总计为$ 55。这两套和解。从理论上讲,您可以选择n个事务,其在Set#1中的总和等于Set#2中的总和。不那么抽象,您可能在Set#1中有8个事务,其总和等于Set#2中的3个事务。 (8C3 = 56,btw)

有人对算法和/或数组或其他类型的数据结构有任何想法吗,其中将所有可能的总和组合与另一个集合进行检查?图书馆中是否有可以帮助的东西?我的想法转向了递归算法,该递归算法计算阶乘以解决此类问题,但是一旦计算了组合函数,那又是什么?如何计算全部56个总和(见上文)?确实有X个总和。

同样,直到运行时,才知道交易的总匹配数。最后一个挑战是我想在VBA / Excel中执行此操作。那就是我的数据所在,那也是我的雇主将支持技术解决方案的地方。抱歉,我无法使用Python编程,在我的工作地点在技术上也不可行。另外,为不显示代码表示歉意,因为我还没有编写代码。

1 个答案:

答案 0 :(得分:0)

在我们进行编程之前,这似乎是一个集合中的问题,最好通过SQL返回数据库(如果有)或Excel中的数据透视表来解决。

如果将数据集1和2放到一个长表中(可能需要添加一列以将行标识为1或2),然后将THAT用作数据透视表的来源...

让数据透视表首先汇总该主键分解后的数量,然后汇总数据集ID,以使(例如)PO#123987上的贷方和借方彼此相邻。

然后VBA可以寻找差异;数据透视表对象允许为每个ID选择所有“贷方/借方”单元对作为一个范围,并且您可以施加一些毛茸茸的条件格式来突出显示不匹配项,或者在范围内编写一个FOR EACH循环以按程序查找它们

据我所知,我已经做了一个非常简单的小问题示例,使用了几十个“贷方”(数据集1)和“借方”,它们的总和相同,但在某些情况下,总会有不同的记录数,并且在一种情况下存在差异。 “基本”表显示了两个数据集,然后显示了第三个表,它们只是两者的组合。以此为源的数据透视表就在旁边。

第2页,“负数”是整个问题的副本,但是“借方”的交易金额设置为负数。这意味着,如果存在对帐,则每个ID的总和为零。然后,可以将更多的数据透视表规则设置为仅显示总和不为零的ID号,从而仅报告差异。但对于本示例,全部显示。

如果这似乎是正确的方法,我们可以研究如何使用VBA制作数据透视表并在其中查找差异。请注意一个很好的数据透视表技巧,如果您单击“ 100”差异数字,它将创建一个临时表,其中包含该金额的记录,您可以看到所有汇总的PO#67890贷方和借方。< / p>

嗯...这里新来的...不确定stackexchange是否提供了将示例电子表格上传到的地方。我已将其存储在这里:

http://brander.ca/stackexchange/Pivot_Table_Example.xlsx

...并且可以将其放置多年。