2013-06-05 61 views
0

我想将我的日常销售存款交易记录(多个分行一天内的多笔存款)与我在线下载的银行帐户交易记录进行匹配。本表的目的是验证销售存款是否确实存入我的账户。考虑到多个条件,如何将一列中的单元格与另一列中的单元格匹配?

列A到C中的单元格是从在线银行对帐单中“复制并粘贴”的,而列D到F中的单元格是从其他员工制作的单独Excel文件“复制并粘贴”的。

Transaction date(A1) | Transaction Type(B1) | Amount(C1) | Sales Date (D1) | Source(E1) | Date Deposited (F1) | Amount(G1) 
6-3-13(A2)   | Cash Deposit(B2)  | $20(C2) | 6-2-13(D2)  | Branch 1(E2) | 6-3-13(F2)   | $60(G2) 
6-3-13(A3)   | Check Deposit(B3) | $50(C3) | 6-2-13(D3)  | Branch 2(E3) | 6-3-13(F3)   | $20(G3) 
6-3-13(A4)   | Cash Deposit(B4)  | $60(C4) | 6-3-13(D4)  | Branch 1(E4) | 6-3-13(F4)   | $80(G4) 
6-3-13(A5)   | Cash Withdrawal (B5) | $80(C5) | 6-3-13(D5)  | Branch 2(E5) | 6-3-13(F5)   | $50(G5) 
(blank) (A6)   | (blank)(B6)   | (blank)(C6)| 6-3-13(D6)  | Branch3(E6) | 6-3-13(F6)   | $50(G6) 

由于在单元格C2至C6之间发现单元格G2,因此H2应该表示为“已保存”。 G3和G5也是如此。另一方面,G4和G6在银行的交易历史中没有找到,因此,应该在H4和H6中说“MISSING”。
请注意,只有当A = F和B =现金或支票存款时,才能比较列G和C.由于B5表示交易是撤回,因此C5不计算在内。

+1

听起来有些东西在逻辑上缺失。你确定你有所有必要的信息来做这个分析吗? – gssi

+0

考虑添加评论而不是答案,特别是如果你没有提供答案,而是提出一个问题 – 2013-06-05 13:58:52

回答

0

这里是一个冗长,但希望可读的实现:

Sub check() 
    Dim bankRange As Range 
    Set bankRange = Range("A2") 

    Do While Not IsEmpty(bankRange) 
     Dim transType As String 
     transType = Trim(bankRange.Offset(0, 1).Value2) 
     If transType = "Cash Deposit" Or transType = "Check Deposit" Then 
      Dim bankDate As Date, bankAmount As Double 
      bankDate = bankRange.Value2 
      bankAmount = bankRange.Offset(0, 2).Value2 

      Dim sellRange As Range 
      Set sellRange = Range("F2") 
      Dim matched As Boolean 
      matched = False 
      Do While Not IsEmpty(sellRange) 
       Dim sellStatusRange As Range, sellStatus As String 
       Set sellStatusRange = sellRange.Offset(0, 2) 
       sellStatus = sellStatusRange.Value2 

       If sellStatus <> "DEPOSITED" Then 
        ' By default consider not matched 
        sellStatusRange.Value2 = "MISSING" 

        Dim sellDate As Date, sellAmount As Double 
        sellDate = sellRange.Value2 
        sellAmount = sellRange.Offset(0, 1).Value2 

        If matched = False And sellDate = bankDate And sellAmount = bankAmount Then 
         sellStatusRange.Value2 = "DEPOSITED" 
         matched = True 
        End If 
       End If 

       Set sellRange = sellRange.Offset(1) 
      Loop 
     End If 
     Set bankRange = bankRange.Offset(1) 
    Loop 
End Sub 

它只是通过银行存款进入,标志着下一个匹配卖为“敷”。

0

如果不使用VBA,您需要一些帮助列。首先添加一列E并将其放入其中=IF(IFERROR(FIND("Deposit",B2),0)>0,CONCATENATE(A2,"_",C2),"")
FIND子句将检测它是否为存款。如果它不是存款,那么它将不会使用该条目。

接下来在H列中添加此公式=CONCATENATE(G2,"_",H2)

现在,您在输入端有一列,在输出端有一列,每列都有要比较的信息。

J放在这个公式=VLOOKUP(I2,$E$2:$E$6,1,FALSE)。它将通过E列搜索与值相匹配的内容。在列K中使用此公式=IF(I2=J2,"Deposited","Missing")

编辑: 更好地解决同一存款的多个实例的不同方法。

首先插入一列E和使用此公式=IF(IFERROR(FIND("Deposit",B2),0)>0,CONCATENATE(A2,"_",C2),"")

此列放日期和金额一起每当它是一个存款。

=CONCATENATE(G2,"_",H2)

创建列I创建列J其中第一行会=IF(COUNTIF($E$2:$E$6,I2)>0,"Deposit","Missing")

对于列J使用这个公式=IF(COUNTIF($E$2:$E$6,I3)-COUNTIF(I$2:I2,I3)>0,"Deposit","Missing")的下一行,并复制下来。新公式将扣除前几行中的任何实例,以便它不会重复计算事务。

+0

这跟随你的方法,它有什么似乎是一个错误,其中你的银行只承认6/3一个存款50美元,但有一个从分支机构2和分支机构3存入您的支票。 –

+0

如果我理解的很好,这正是OP想要检测的这种异常。 – Pragmateek

+0

非常感谢Dean MacGregor!如果我在H列中有两笔存款交易,金额为20美元,而C列中只有一笔交易金额达到这一数额,那么对于这两笔交易,它仍然会显示为“存款”。我该如何纠正?另外,如果我的存款记录未出现在银行交易历史记录中,则不会出现“丢失”一词。出现“#N/A”。再次提前感谢。 –

相关问题