ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 银行对账-查找两表之间差异?

银行对账-查找两表之间差异?

作者:绿色风 分类: 时间:2022-08-18 浏览:133
楼主
研究研究
Q:银行对账-查找两表之间差异?

         每个月我都要这样一个一个数的核对到底是哪笔款记错了呢?往往对账比录账要更花时间!希望找到好的方法

A: 由于是账本,有些东西是一笔对一笔,有些是2笔对一笔(一笔是汇款,一笔是手续费)、所以我用排查法。把两边一样的都排除掉。剩下的就是对不上账的了
  1. Sub 开始()
  2. Sheet2.Range("a1:d1048576").ClearContents
  3. Dim A As Long, D As Long, A1 As Long, X As Long, Y As Long, Y1 As Long, K As Boolean, Z As String
  4. 'A=SHEET1的A列 D=SHEET1的D列 A1=SHEET2的A列 X,Y,Y1=循环变量 K=是否找到 Z=SHEET1的A列字符串
  5. A = Range("A1048576").End(xlUp).Row
  6. D = Range("D1048576").End(xlUp).Row
  7. For X = A To 2 Step -1
  8. If Range("A" & X) = 0 Then Range("A" & X).Delete Shift:=xlUp
  9. Next X
  10. For X = D To 2 Step -1
  11. If Range("D" & X) = 0 Then Range("D" & X).Delete Shift:=xlUp
  12. Next X
  13. '以上是去掉A,D列中的0,以免以后有不必要的循环
  14. A = Range("A1048576").End(xlUp).Row
  15. For X = 2 To A
  16. Z = Range("A" & X).Value
  17. K = False

  18. For Y = 2 To D
  19. If Z = Range("d" & Y) Then
  20. A1 = A1 + 1
  21. Sheet2.Range("a" & A1) = Range("a" & X)
  22. Sheet2.Range("c" & A1) = Range("d" & Y)
  23. Range("d" & Y).Delete Shift:=xlUp
  24. K = True
  25. Exit For
  26. End If
  27. Next Y

  28. For Y = 2 To D
  29. If K = True Then Exit For

  30. For Y1 = Y + 1 To D
  31. If Z = Range("d" & Y) + Range("d" & Y1) Then
  32. A1 = A1 + 1
  33. Sheet2.Range("a" & A1) = Range("a" & X)
  34. Sheet2.Range("c" & A1) = Range("d" & Y)
  35. Sheet2.Range("d" & A1) = Range("d" & Y1)
  36. Range("d" & Y1).Delete Shift:=xlUp
  37. Range("d" & Y).Delete Shift:=xlUp

  38. K = True
  39. Exit For
  40. End If
  41. Next Y1

  42. Next Y
  43. If K = False Then Range("B" & X) = "这个数据有问题"
  44. Next X

  45. For X = A To 2 Step -1
  46. If Range("b" & X) = "" Then Range("A" & X).Delete Shift:=xlUp
  47. Next X
  48. Range("b2:b1048576").ClearContents
  49. Range("b2") = "以下数据有问题"
  50. End Sub

 


中行人民币666.rar
2楼
研究研究
花花老师的也特别的好!



  1. Sub justtest()
  2. Dim ar1, ar2, i&, j&, k&, s$
  3. Application.ScreenUpdating = False
  4. ar1 = Range("a1:a" & Cells(Rows.Count, 1).End(3).Row).Value
  5. ar2 = Range("d1:d" & Cells(Rows.Count, 4).End(3).Row).Value
  6. Range("a:a", "d:d").Interior.Color = xlNone
  7. Range("e1").Interior.Color = vbYellow
  8. For i = 2 To UBound(ar1, 1)
  9. If ar1(i, 1) <> 0 Then
  10. For j = 2 To UBound(ar2, 1)
  11. If ar2(j, 1) = ar1(i, 1) Then
  12. ar2(j, 1) = 0
  13. t = True
  14. GoTo 100
  15. End If
  16. Next j
  17. For j = 2 To UBound(ar2, 1) - 1
  18. For k = j + 1 To UBound(ar2, 1)
  19. If ar2(j, 1) + ar2(k, 1) = ar1(i, 1) Then
  20. ar2(j, 1) = 0
  21. ar2(k, 1) = 0
  22. GoTo 100
  23. End If
  24. Next k, j
  25. s = s & ",a" & i
  26. If Len(s) > 245 Then Range(Mid(s, 2)).Interior.Color = vbYellow: s = ""
  27. End If
  28. 100
  29. Next i
  30. If Len(s) > 0 Then Range(Mid(s, 2)).Interior.Color = vbYellow: s = ""
  31. For i = 2 To UBound(ar2, 1)
  32. If ar2(i, 1) > 0 Then s = s & ",d" & i
  33. If Len(s) > 245 Then Range(Mid(s, 2)).Interior.Color = vbYellow: s = ""
  34. Next
  35. If Len(s) > 0 Then Range(Mid(s, 2)).Interior.Color = vbYellow: s = ""
  36. Application.ScreenUpdating = True
  37. End Sub




后续: 花花老师的快而准,但是数据分散。不利于校对
本人的虽然利用校对。但运行起来会闪动

得加上一句

Application.ScreenUpdating = False

中间是源代码
Application.ScreenUpdating = true

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap