我希望将我的每日销售存款交易记录(多个分行中的多个存款)与我在线下载的银行帐户交易历史记录相匹配。此表的目的是验证销售存款是否确实存入我的帐户。
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。
答案 0 :(得分: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
它只是通过银行存款并将下一个匹配的卖出标记为“已存入”。
答案 1 :(得分: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")
并将其复制下来。新公式将扣除先前行中的任何实例,以便它不会重复计算事务。