设为首页收藏本站

 找回密码
 立即注册

只需一步,快速开始

搜索
查看: 170|回复: 16

继续求助,优化运行速度?

 火.. [复制链接]
累计签到:22 天
连续签到:1 天
灌水成绩
4
196
4021
主题
帖子
积分

等级头衔

ID : 859

助理工程师

积分成就 测量币 : 4021
在线时间 : 0 小时
注册时间 : 2025-10-5
最后登录 : 2026-6-9

勋章
UID勋章测量学徒测量员
发表于 2026-4-19 22:18:10 | 显示全部楼层 |阅读模式 IP:北京
比对要求:数据1在sheet1中,要随时变换调整,数据2在sheet2中,模板基本不变。要比对的结果在sheet3中,即sheet1和sheet2中的B列相同,则在sheet3中拼接在一行。可能是一对一,也能是一对多,或多对多。。。原来的代码也是excelhome中大神写的,在此表示感谢,我初学者是望尘莫及。现在数据量越来越大,运行速度太慢。。他原来像是遍历法则搞的,,,求哪位大神出手,优化一下。附件因为文件限制2兆,所以sheet3没有运行数据。。。谢谢。
比对模板.rar (1.3 MB, 下载次数: 0)
累计签到:23 天
连续签到:1 天
灌水成绩
2
194
4436
主题
帖子
积分

等级头衔

ID : 837

助理工程师

积分成就 测量币 : 4436
在线时间 : 0 小时
注册时间 : 2025-11-6
最后登录 : 2026-6-3

勋章
UID勋章测量学徒测量员
发表于 2026-4-19 22:53:58 | 显示全部楼层 IP:北京
代码如下:
Sub TEST比对()
'先清空表的数据
    Cells.Select
    Cells.Delete Shift:=xlShiftUp
   

s1col = Sheets(1).[iv1].End(xlToLeft).Column
s2col = Sheets(2).[iv1].End(xlToLeft).Column

ReDim TARR(1 To 165500, 1 To s1col + s2col)
Application.ScreenUpdating = False
dteStart = Timer
Sheets(3).Select
Rows("2:165500").ClearContents
Cells.Font.ColorIndex = 0

Set DIC = CreateObject("SCRIPTING.DICTIONARY")
Set DIC1 = CreateObject("SCRIPTING.DICTIONARY")
Rng = Sheets(1).[a1].CurrentRegion
For r = 2 To UBound(Rng)
Y = Trim(Rng(r, 2))
If DIC.EXISTS(Y) Then
DIC(Y) = DIC(Y) & "," & r
Else
DIC(Y) = r
End If
Next
Rng1 = Sheets(2).[a1].CurrentRegion
For r = 2 To UBound(Rng1)
Y = Trim(Rng1(r, 2))
If DIC1.EXISTS(Y) Then
DIC1(Y) = DIC1(Y) & "," & r
Else
DIC1(Y) = r
End If
Next
K = DIC.KEYS
t = DIC.ITEMS

s1col = Sheets(1).[iv1].End(xlToLeft).Column
s2col = Sheets(2).[iv1].End(xlToLeft).Column

For IV = 0 To DIC.Count - 1
   Y = K(IV)
   WW = Split(t(IV), ",")
   For i = 0 To UBound(WW)
      If DIC1.EXISTS(Y) Then
            XX = Split(DIC1(Y), ",")
            For II = 0 To UBound(XX)
                    TR = TR + 1
                        For qq = 1 To s1col
                            TARR(TR, qq) = Rng(WW(i), qq)
                        Next
                        For qq = s1col + 1 To s1col + s2col
                            TARR(TR, qq) = Rng1(XX(II), qq - s1col)
                        Next
                        If UBound(WW)  0 Then
                                Range("A" & TR + 1).Font.ColorIndex = 3
                        End If
                        If UBound(XX)  0 Then
                                Range("E" & TR + 1).Font.ColorIndex = 3
                        End If
            Next II
      Else
           TR = TR + 1
            For qq = 1 To s1col
                  TARR(TR, qq) = Rng(WW(i), qq)
            Next
      End If
   Next i
    If DIC1.EXISTS(Y) Then DIC1.Remove Y
Next

t = DIC1.ITEMS
For i = 0 To DIC1.Count - 1
      XX = Split(t(i), ",")
         For II = 0 To UBound(XX)
            TR = TR + 1
                 For qq = s1col + 1 To s1col + s2col
                  TARR(TR, qq) = Rng1(XX(II), qq - s1col)
                Next
         Next II
Next i
[a2].Resize(TR, s1col + s2col) = TARR
Application.ScreenUpdating = True

Sheets("Sheet1").Select
    Range(Cells(1, 1), Cells(1, s1col)).Select
    Selection.Copy
    Sheets("Sheet3").Select
    Range(Cells(1, 1), Cells(1, s1col)).Select
    ActiveSheet.Paste
    Sheets("Sheet2").Select
    Range(Cells(1, 1), Cells(1, s2col)).Select
   
    Selection.Copy
    Sheets("Sheet3").Select
    ActiveSheet.Cells(1, s1col + 1).Select
    ActiveSheet.Paste
   
strTime = Format((Timer - dteStart), "0.00000")
MsgBox "运行过程:" & strTime & "秒"
    Application.CutCopyMode = False
'MsgBox "OK"

End Sub
回复

使用道具 举报

累计签到:21 天
连续签到:1 天
灌水成绩
2
174
3202
主题
帖子
积分

等级头衔

ID : 861

助理工程师

积分成就 测量币 : 3202
在线时间 : 0 小时
注册时间 : 2026-1-21
最后登录 : 2026-6-14

勋章
UID勋章测量学徒测量员
发表于 2026-4-19 23:06:04 | 显示全部楼层 IP:北京
数组字典全用上了,没优化余地。
回复

使用道具 举报

累计签到:25 天
连续签到:3 天
灌水成绩
4
179
3028
主题
帖子
积分

等级头衔

ID : 823

助理工程师

积分成就 测量币 : 3028
在线时间 : 0 小时
注册时间 : 2025-9-27
最后登录 : 2026-6-14

勋章
UID勋章测量学徒测量员
发表于 2026-4-19 23:32:16 | 显示全部楼层 IP:北京
让原作者改一下好了。
回复

使用道具 举报

累计签到:24 天
连续签到:1 天
灌水成绩
1
177
3820
主题
帖子
积分

等级头衔

ID : 867

助理工程师

积分成就 测量币 : 3820
在线时间 : 0 小时
注册时间 : 2026-3-9
最后登录 : 2026-5-26

勋章
UID勋章测量学徒测量员
发表于 2026-4-19 23:54:15 | 显示全部楼层 IP:北京
谢谢关注。原作者联系不上了,好多年前写的。
回复

使用道具 举报

累计签到:42 天
连续签到:18 天
灌水成绩
2
223
15249
主题
帖子
积分

等级头衔

ID : 586

中级工程师

积分成就 测量币 : 15249
在线时间 : 233 小时
注册时间 : 2026-1-15
最后登录 : 2026-6-15

勋章
UID勋章测量学徒测量员
发表于 2026-5-1 01:21:43 | 显示全部楼层 IP:广东东莞
图文搭配很好,理解更快。
回复

使用道具 举报

累计签到:40 天
连续签到:20 天
灌水成绩
4
180
12647
主题
帖子
积分

等级头衔

ID : 511

中级工程师

积分成就 测量币 : 12647
在线时间 : 234 小时
注册时间 : 2025-11-2
最后登录 : 2026-6-15

勋章
UID勋章测量学徒测量员
发表于 2026-5-1 01:43:51 | 显示全部楼层 IP:广东东莞
对我帮助很大,解决了卡了很久的问题。
回复

使用道具 举报

累计签到:35 天
连续签到:21 天
灌水成绩
3
204
14369
主题
帖子
积分

等级头衔

ID : 545

中级工程师

积分成就 测量币 : 14369
在线时间 : 232 小时
注册时间 : 2025-12-31
最后登录 : 2026-6-15

勋章
UID勋章测量学徒测量员
发表于 2026-5-1 01:43:51 | 显示全部楼层 IP:广东东莞
讲解细致,不容易踩坑。
回复

使用道具 举报

累计签到:22 天
连续签到:1 天
灌水成绩
2
55
4277
主题
帖子
积分

等级头衔

ID : 776

助理工程师

积分成就 测量币 : 4277
在线时间 : 0 小时
注册时间 : 2025-10-13
最后登录 : 2026-6-11

勋章
UID勋章测量学徒测量员
发表于 2026-5-19 14:07:14 | 显示全部楼层 IP:欧洲和中东地区
我是来刷分的,嘿嘿
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
灌水成绩
1
22
1728
主题
帖子
积分

等级头衔

ID : 1360

高级技术员

积分成就 测量币 : 1728
在线时间 : 0 小时
注册时间 : 2025-10-3
最后登录 : 2026-6-14

勋章
UID勋章测量员
发表于 2026-5-22 16:49:09 | 显示全部楼层 IP:美国
不错
回复

使用道具 举报

快速回复换一批
好贴支持!
感谢楼主,好人一生平安
顶顶顶
路过留名
好贴帮顶
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|精密测量技术论坛 ( 桂ICP备2026007449号-1 )

GMT+8, 2026-6-15 02:10 , Processed in 0.178396 second(s), 54 queries .

Powered by 精密测量技术论坛

© 2025-2026 联系站长

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