ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 Office知识技巧免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 290|回复: 2

请高手帮助优化,数据过多时运行太慢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-5-11 08:40 | 显示全部楼层 |阅读模式


本帖最后由 lrqiang 于 2019-5-10 01:21 编辑


请高手帮助优化,数据过多时运行太慢

    end_1 = Sheets("数据").Cells(65536, "A").End(xlUp).Row   '确定数据的记录数符值给变量 end_1
    end_2 = Sheets("路街巷").Cells(65536, "A").End(xlUp).Row   '确定数据的记录数符值给变量 end_1
   
   
    Sheets("数据").Select
    Range("B2:H40000").Select
    Selection.ClearContents
    Application.CutCopyMode = False
    For i = 2 To end_1
        a1 = Trim(Cells(i, "A").Value)
        a2 = Len(Trim(a1))
        '''''''''''''''除"广东省广州市番禺区榄核镇"
         If Left(a1, 12) = "广东省广州市番禺区榄核镇" Then
                      a1 = Trim(Mid(a1, 13, 50))
        End If
        If Left(a1, 9) = "广州市番禺区榄核镇" Then
                      a1 = Trim(Mid(a1, 10, 50))
        End If
        If Left(a1, 6) = "番禺区榄核镇" Then
                      a1 = Trim(Mid(a1, 7, 50))
        End If
        If Left(a1, 3) = "榄核镇" Then
                      a1 = Trim(Mid(a1, 4, 50))
        End If
        B1 = ""
        b2 = ""
        b3 = ""
        b4 = ""
        C1 = 0
        C2 = 0
        C3 = 0
        C4 = 0
          If a2 > 0 Then
             For j = 1 To a2
                 a3 = Mid(a1, j, 1)
                    If InStr("0123456789", a3) = 0 And C2 = 0 And C3 = 0 And C4 = 0 Then
                       B1 = B1 + a3
                       C1 = 1
                    End If
                    If InStr("0123456789", a3) > 0 And C3 = 0 And C1 = 1 And C4 = 0 Then
                       b2 = b2 + a3
                       C2 = 1
                    End If
                    If InStr("0123456789", a3) = 0 And C4 = 0 And C1 = 1 And C2 = 1 Then
                       b3 = b3 + a3
                       C3 = 1
                    End If
                    If InStr("0123456789", a3) > 0 And C1 = 1 And C2 = 1 And C3 = 1 Then
                       b4 = b4 + a3
                       C4 = 1
                    End If
             Next j
             Cells(i, "B").Value = Trim(B1)
             Cells(i, "C").Value = b2
             Cells(i, "D").Value = Trim(b3)
             Cells(i, "E").Value = b4
             With Sheets("路街巷").Range("A1").Resize(end_2, 1)
               B1 = Trim(B1)
               Set C = .Find(B1)
               If Not C Is Nothing Then
                   Sheets("数据").Cells(i, "F").Value = C.Offset(, 1).Value
                   Sheets("数据").Cells(i, "G").Value = C.Offset(, 2).Value
               End If
             End With
             For k = 1 To end_2
                 d1 = Trim(Sheets("路街巷").Cells(k, "A").Value)
                 If a1 Like ("*" + d1 + "*") And Len(Sheets("数据").Cells(i, "G").Value) = 0 Then
                    Sheets("数据").Cells(i, "F").Value = Sheets("路街巷").Cells(k, "B").Value
                    Sheets("数据").Cells(i, "G").Value = Sheets("路街巷").Cells(k, "C").Value
                 End If
             Next k

          End If
        If i > 40 Then
           ActiveWindow.SmallScroll Down:=1
        End If
    Next
   
       Range("B2").Select
   
End Sub

街巷分析.rar

33.95 KB, 下载次数: 0

TA的精华主题

TA的得分主题

发表于 2019-5-11 09:10 | 显示全部楼层
循环判断用的太多了,数组字典米看到,要提速的话只能重新写了,源代码进步空间为0

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-5-11 22:13 | 显示全部楼层
约定的童话 发表于 2019-5-11 09:10
循环判断用的太多了,数组字典米看到,要提速的话只能重新写了,源代码进步空间为0

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

本版积分规则

关注官方微信,高效办公专列,每天发车

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

GMT+8, 2020-7-12 11:41 , Processed in 0.054448 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

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

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

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