excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel VBA「案例」银行对账单批量核对勾选/银企对账明细批量勾选

内容提要

  • 银行明细账与银行流水核对勾选

大家好,我是冷水泡茶,这两天在某论坛上看到一则求助贴,[求助] 麻烦帮忙看看这段代码要怎么修改关于流水匹配问题。

代码就不看了,我们看看他的表格,是这样的:

他的要求是(原话):

好久没有来论坛了,最近遇到银行流水与金蝶导出核对明细账问题,想请教一下各位大神需要怎么处理,上面有一段代码,但是这段代码只能核对两边1贷方数据是否有相同的,如果有,就清楚相同数据+前面日期,但是我想要的效果是左边的借方,贷方数据日期,与右边的借方,贷方,日期核对重复值,也就是日期+金额一起核对,当日期+金额一致时,才算重复,并且清空对应两边数据,金额匹配的话,希望能实现不会因为千分号与没有千分号情况,而导致匹配不上,非常感谢!

他的要求是把同日期,同金额的数据清除,留下的就是未达账了。但我觉得这样的做法不是太好。

我觉得我们最好是把核对相符的记录标志出来,核对完成后,未标志的数据就是未达账。并且,按照日期相同来核对,是不是过于严格,感觉没有太大的必要。

不过,我还是按照他的需求写了一段清除相同记录的代码:

Sub check()    Dim ws As Worksheet    Dim arr()    Dim lastRow As Long    Dim lastCol As Long    Set ws = Sheets("Sheet1")    With ws        lastRow = .UsedRange.Rows.Count        lastCol = .UsedRange.Columns.Count        arr = .Range("A4:M" & lastRow).Value    End With    For i = 1 To UBound(arr)        If arr(i, 3) <> "" Then            For j = 1 To UBound(arr)                If CDate(arr(i, 1)) = CDate(arr(j, 10)) Then                    If arr(i, 5) <> 0 Then                        If CDbl(arr(i, 5)) = CDbl(arr(j, 11)) Then                            arr(i, 5) = 0                            arr(j, 11) = 0                            GoTo NextFor                        End If                    ElseIf arr(i, 4) <> 0 Then                         If CDbl(arr(i, 4)) = CDbl(arr(j, 12)) Then                            arr(i, 4) = 0                            arr(j, 12) = 0                            GoTo NextFor                        End If                    End If                End If            Next        End IfNextFor:    Next    ws.Range("A4").Resize(UBound(arr), UBound(arr, 2)) = arrEnd Sub

另外,我按照自己的想法,重新设计了表单,采用标志相同金额的方式,不考虑日期,做了一个简单的银行对账明细记录核对勾选小工具,分享给大家:

基本思路与实现过程

1、重新设计表头,规范字段:企业借方,企业贷方,LeftCheck,银行借方,银行贷方,RightCheck,为关键字段,不可修改。

左边为企业银行日记账:

右边为银行流水明细表:

2、我们在勾选之前,要先清除一下已有核对标志。我们点“勾对”,运行核对过程。核对完之后,点“未达”把未标志的数据复制到“未达账“这张表中,供编制银行余额调节表使用。在我们自动勾对之后,我们还可以手工勾对,把一对多,甚至多对多的记录手工标志(在LeftCheck、RightCheck填上内容),然后再提取未达账。

3、勾选核对过程:

(1)把明细数据装入数组arr。数据包括表头。为了增加灵活适用性(可以插入列),一方面指定表头字段不能修改,另一方面,我们把关键的几列采用变量的形式表示:

With ws    lastRow = .UsedRange.Rows.Count    lastCol = .UsedRange.Columns.Count    arr = .Range(.Cells(3, 1), .Cells(lastRow, lastCol)).Value    leftDebitPos = Pxy(arr, "企业借方", 2)    leftCreditPos = Pxy(arr, "企业贷方", 2)    rightDebitPos = Pxy(arr, "银行借方", 2)    rightCreditPos = Pxy(arr, "银行贷方", 2)    leftCheckPos = Pxy(arr, "LeftCheck", 2)    rightCheckPos = Pxy(arr, "RightCheck", 2)End With

(2)循环数组,比较左边、右边对应借贷方的金额,如果相同的,就在各自的右边勾选列填上内容,什么内容并不重要,刚开始我是用“√”,后来因为调试代码,改为显示对方所在的行号。找到相同金额的,就进入下一个循环。

If leftDebit = rightCredit Then    'arr(i, leftCheckPos) = "√"    'arr(j, rightCheckPos) = "√"    arr(i, leftCheckPos) = "R-" & j + 2    arr(j, rightCheckPos) = "L-" & i + 2    GoTo NextForEnd If

(3)把结果写入数组,并将勾选记录标上颜色:

ws.Range("A3").Resize(UBound(arr), UBound(arr, 2)) = arrCall ColorChecked(ws, leftCheckPos, rightCheckPos)

标色的代码原来是写在这个过程里面的,但不知为何,总是有问题,后来试着把它单独列一个过程,基本是同样的代码,倒是正常了,真是有点百思不得其解。

4、生成未达账明细过程。

(1)把勾选完成的“核对表”装入数组arr。

(2)循环数组,把LeftCheck、RightCheck为空的记录提取出来,存到一个数组arrTem里。

(3)把结果写入“未达账“表。这里进行了容错处理,如果没有”未达账“这张表,我们就新建,如果有,则清除内容。

5、今天这个案例,应该说有一定的实用性,特别是对于银行流水非常多的单位,又没有财务软件支持自动对账的,可以减轻一点人工核对的工作量。

6、当然,这个案例在功能方面,还有很大的深挖空间,我也准备继续做,今天先发出来呢,一方面这个功能可以用了,不必追求完美,另一方面是为了更新公众号文章:

(1)一对多匹配。

这里主要指企业账面存在合并银行单据入账的情况,反过来,一个银行流水金额,对应多个企业银行明细账金额,这种情况不能说没有,只能说极少(我曾经工作过的一个集团公司,有按照部门核算资金的,经常出现一笔货款分属于几个部门的情况,在做账的时候就不得不按部门拆分成几个金额,造成银行对账非常麻烦。)

我们财务人员在账务处理时,要根据实际情况来决定是否需要合并银行单据来填制会计凭证。如果经常会造成银行对账困难的,那我们就应该尽量按照银行单据逐一输入银行科目的发生额。如果大多数月份,银行单据均能完全入账,而且账面存款余额与对账单余额经常能够保持一致,那么,对于同类型的业务,合并制单应该也是可以的,比如银行手续费,几毛几块的,没有必要一笔笔地去做。

(2)直接生成“银行存款余额调节表“

(A)读取上月“银行存款余额调节表“中的未达账到”核对表“中,参与勾选。

(B)读取“企业银行存款明细账”,按核对表相关字段整理成固定格式的Excel文档。手工复制粘贴进来也行。

(C)读取“银行流水明细表”,这是网银导出来的电子表格,处理方式同上。

(D)核对完成后,按“核对表第二行”银行账户“名称,加上”月份“保存为单独的文件。

今天就这样!完整代码见第二条推文。

~~~~~~End~~~~~~

喜欢就点个赞、点在看、留言评论、分享一下呗!感谢支持!

本文于2023年10月12日首发于本人同名公众号:Excel活学活用(VBA编程实战),更多文章案例请搜索关注!

案例文件分享说明:请关注本人同名VX公众号(VBA编程实战)了解文件获取方式,免费!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接