ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 483|回复: 16

[求助] 文件里面是有代码的,但是运行很慢,请问要怎么修改能运行快点吗?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-12-14 10:12 | 显示全部楼层 |阅读模式
文件里面,有左右两边数据,文件里面的代码是,当数据一致时清空两边对应数据,一一对应,因为可能会出现重复单号,条件,一对多情况,这种情况只需要清理一对一的,没有对应的就保留。如果单号一致,就将左边数据复制到右边对应单号位置,但是现在总务上百万,几百条,运行起来很慢,请问要怎么修改能运行快点呢,最好能将找不到的单号,或者是单号一致数据不一致的提取到另一个表格,更方便查看,谢谢
  1. Public Sub dsm()
  2. '找出相同数据并删除
  3. Dim m As Integer, n As Integer, r1 As Integer, r2 As Integer
  4. r1 = Range("b65536").End(xlUp).Row
  5. r2 = Range("i65536").End(xlUp).Row
  6. For n = 2 To r1
  7. For m = 2 To r2
  8. If Range("b" & n) = Range("i" & m) Then
  9. If CDate(Range("a" & n)) = Range("h" & m) And Range("c" & n) = Range("j" & m) Then
  10. Range("a" & n & ":c" & n).ClearContents
  11. Range("h" & m & ":j" & m).ClearContents
  12. Else
  13. Range("K" & m).Resize(1, 3) = Range("b" & n).Resize(1, 3).Value
  14. End If
  15. Exit For
  16. End If
  17. Next
  18. Next
  19. End Sub
复制代码



测试.zip

1.15 MB, 下载次数: 19

TA的精华主题

TA的得分主题

发表于 2023-12-14 13:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
供参考。

sulli112_测试.rar

1.1 MB, 下载次数: 44

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-15 09:51 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-6 16:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

不好意思过了这么久,再来请教一点事情,就是当左边前面三列数据等于右边前面三列数据数据一致时,对应的红色框框那两列D列,K列的数据,也一并清楚,要怎么修改呢
  1. Public Sub dsm()
  2.     '找出相同数据并删除
  3.     Dim m As Integer, n As Integer, r1 As Integer, r2 As Integer
  4.     Dim Arr(), Brr(), Crr()
  5.     Dim ds As Object
  6.     Set ds = CreateObject("Scripting.Dictionary")
  7.     r1 = Range("b65536").End(xlUp).Row
  8.     r2 = Range("i65536").End(xlUp).Row
  9.     Arr = Range("a3:c" & r1).Value
  10.     Brr = Range("h3:j" & r2).Value
  11.     For n = 1 To r1 - 2
  12.         ds(Arr(n, 2)) = n
  13.     Next
  14.     ReDim Crr(1 To r2 - 2, 1 To 3)
  15.     For m = 1 To r2 - 2
  16.         If ds.exists(Brr(m, 2)) Then
  17.             n = ds(Brr(m, 2))
  18.             For i = 1 To 3
  19.                 If Arr(n, 1) = Brr(m, 1) And Arr(n, 3) = Brr(m, 3) Then
  20.                     Arr(n, i) = "": Brr(m, i) = ""
  21.                 Else
  22.                     Crr(m, i) = Arr(n, i)
  23.                 End If
  24.             Next
  25.         End If
  26.     Next
  27.     Application.EnableEvents = False
  28.     Application.ScreenUpdating = False
  29.     Range("a3:c" & r1).Value = Arr
  30.     Range("h3:j" & r2).Value = Brr
  31.     Range("k3:m" & r2).Value = Crr
  32.     Application.EnableEvents = True
  33.     Application.ScreenUpdating = True
  34. End Sub

  35. Public Sub dsm_2()
  36.     '找出相同数据并删除,将找不到的单号,或者是单号一致数据不一致的提取到另一个表格
  37.     Dim m As Integer, n As Integer, r1 As Integer, r2 As Integer
  38.     Dim Arr(), Brr(), Crr(), Drr(), r%, ra%
  39.     Dim ds As Object
  40.     Set ds = CreateObject("Scripting.Dictionary")
  41.     r1 = Range("b65536").End(xlUp).Row
  42.     r2 = Range("i65536").End(xlUp).Row
  43.     Arr = Range("a3:c" & r1).Value
  44.     Brr = Range("h3:j" & r2).Value
  45.     For n = 1 To r1 - 2
  46.         ds(Arr(n, 2)) = n
  47.     Next
  48.     ReDim Crr(1 To r2 - 2, 1 To 7), Drr(1 To r1 - 2, 1 To 3)
  49.     For m = 1 To r2 - 2
  50.         If ds.exists(Brr(m, 2)) Then
  51.             n = ds(Brr(m, 2))
  52.             If Arr(n, 1) = Brr(m, 1) And Arr(n, 3) = Brr(m, 3) Then
  53.                 Arr(n, 1) = "": Arr(n, 3) = ""
  54.             Else
  55.                 r = r + 1
  56.                 If Arr(n, 1) <> "" Then ra = ra + 1
  57.                 For i = 1 To 3
  58.                     Crr(r, i) = Brr(m, i)
  59.                     If Arr(n, 1) <> "" Then
  60.                         Crr(r, i + 4) = Arr(n, i)
  61.                         Drr(ra, i) = Arr(n, i)
  62.                     End If
  63.                 Next
  64.             End If
  65.         Else
  66.             r = r + 1
  67.             For i = 1 To 3
  68.                 Crr(r, i) = Brr(m, i)
  69.             Next
  70.         End If
  71.     Next
  72.     For n = 1 To r1 - 2
  73.         If Arr(n, 1) <> "" Then
  74.             ra = ra + 1
  75.             For i = 1 To 3
  76.                 Drr(ra, i) = Arr(n, i)
  77.             Next
  78.         End If
  79.     Next
  80.     Application.EnableEvents = False
  81.     Application.ScreenUpdating = False
  82.     Range("l2:n2").Value = Range("a2:c2").Value
  83.     Range("a3:c" & r1).Value = Drr
  84.     Range("h3:n" & r2).Value = Crr
  85.     Range("l2:n" & r + 2).Borders.LineStyle = 1
  86.     Application.EnableEvents = True
  87.     Application.ScreenUpdating = True
  88. End Sub


复制代码


1d0b158506a5c039b8c6c07e1099e01.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-7 21:59 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
山菊花 发表于 2023-12-14 13:51
供参考。

可以辛苦您解答一下我四楼的问题吗,非常感谢

TA的精华主题

TA的得分主题

发表于 2024-1-8 09:02 | 显示全部楼层
Public Sub dsm()
    '找出相同数据并删除
    Dim m As Integer, n As Integer, r1 As Integer, r2 As Integer
    Dim Arr(), Brr(), Crr()
    Dim ds As Object
    Set ds = CreateObject("Scripting.Dictionary")
    r1 = Range("b65536").End(xlUp).Row
    r2 = Range("i65536").End(xlUp).Row
    Arr = Range("a3:d" & r1).Value
    Brr = Range("h3:k" & r2).Value
    For n = 1 To r1 - 2
        ds(Arr(n, 2)) = n
    Next
    ReDim Crr(1 To r2 - 2, 1 To 3)
    For m = 1 To r2 - 2
        If ds.exists(Brr(m, 2)) Then
            n = ds(Brr(m, 2))
            For i = 1 To 4
                If Arr(n, 1) = Brr(m, 1) And Arr(n, 3) = Brr(m, 3) Then
                    Arr(n, i) = "": Brr(m, i) = ""
'                Else
'                    Crr(m, i) = Arr(n, i)
                End If
            Next
        End If
    Next
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Range("a3:d" & r1).Value = Arr
    Range("h3:k" & r2).Value = Brr
'    Range("k3:m" & r2).Value = Crr
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-8 11:42 | 显示全部楼层
山菊花 发表于 2024-1-8 09:02
Public Sub dsm()
    '找出相同数据并删除
    Dim m As Integer, n As Integer, r1 As Integer, r2 As  ...

首先很感谢您在抽出时间回复我的问题,代码之前运行没有什么问题,不知道为什么这次的数据运行会出现图片(1)第一个问题:原左边数据第一条单号只有一条,但是代码运行之后会变成左边出现这个单号数据两次,请问是什么原因呢?(2)第二个问题,我刚刚复制了您回复的新代码运行,发现是D列数据全部清楚,但是我的意思是如果代码运行之后,B列的单号有数据,那么对应的B列备注保留,一起复制到右边财付通备注,谢谢
f2d11724b7024371b98ae72cdf286f6.png

测试.zip

1.15 MB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2024-1-8 14:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
点击按钮1,得到下面结果:

QQ截图20240108144629.jpg

不保留其中D列内容吗?(K列未见)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-8 15:29 | 显示全部楼层
山菊花 发表于 2024-1-8 14:48
点击按钮1,得到下面结果:

如果财付通跟平台数据,左右两边单号,金额,日期存在一直时候,对应D列数据清空,如果不存在保留,K列是没有数据的,我没有把数据附上,D列数据不需要跟K列数据匹配,因为双方都是备注,肯定不相等的

TA的精华主题

TA的得分主题

发表于 2024-1-8 20:09 | 显示全部楼层
脑补不了数据,你测试一下,看改得是否正确。

sulli112_测试.rar

1.1 MB, 下载次数: 11

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-16 14:14 , Processed in 0.046436 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表