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。C5 不计算在内,因为 B5 表示该交易是取款。

4

2 回答 2

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),"")

只要是存款,此列就会将日期和金额放在一起。

创建I=CONCATENATE(G2,"_",H2)

创建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") 并将其复制下来。新公式将扣除前面行中的所有实例,这样就不会重复计算交易。

于 2013-06-05T17:10:34.283 回答
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

它只是通过银行存款并将下一个匹配的销售标记为“存款”。

于 2013-06-05T16:47:05.607 回答