2013-06-05 60 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」。再次提前感謝。 –

相關問題