ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 麻烦大家帮忙优化下代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-1-18 10:23 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如果B列物资名称是A类钢材,C列送检单位是鞍山钢厂,同时满足相关 验收标准后在W列中显示结果。写了一段代码,由于数据量偏大运行速度较慢,麻烦大家帮忙优化一下

Sub ed()
Dim i As Long
For i = 9 To Range("b65536").End(3).Row
If Cells(i, 2) = "A类钢材" And Cells(i, 3) = "鞍山钢厂" And Cells(i, 7) <= 0.0025 And Cells(i, 8) <= 0.0025 And Cells(i, 10) <= 0.00085 And Cells(i, 11) <= 0.0005 And Cells(i, 18) <> "不合格" Then
   Cells(i, 23) = "A"
ElseIf Cells(i, 2) <> "A类钢材" Then
     Cells(i, 23) = " "
   End If
Next
End Sub

求助.rar

157 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2020-1-18 10:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一、关闭屏幕刷新
二、考虑数组处理吧

TA的精华主题

TA的得分主题

发表于 2020-1-18 10:50 | 显示全部楼层
根据你写的条件只有前面4个符合。可以用数组,结构差不多。用数组改了一下,但是只有4个没必要上传了、要么就是你的条件设置的问题。慢不是因为数据多,是因为你用change,下面在改变单元格,上面又触发。另外你可以增加一个空值跳过。

TA的精华主题

TA的得分主题

发表于 2020-1-18 10:57 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-18 10:59 | 显示全部楼层
yes363001640 发表于 2020-1-18 10:50
根据你写的条件只有前面4个符合。可以用数组,结构差不多。用数组改了一下,但是只有4个没必要上传了、要么 ...

数据1年下来近3W条,数组不太会用,您说的问题正是我的困惑之处,能指点一下吗

TA的精华主题

TA的得分主题

发表于 2020-1-18 11:02 | 显示全部楼层
polluxb1981 发表于 2020-1-18 10:59
数据1年下来近3W条,数组不太会用,您说的问题正是我的困惑之处,能指点一下吗

你还不如把完整数据上传上来,楼上那个流氓兔图像的是大神,分分钟就弄完。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-18 11:05 | 显示全部楼层
microyip 发表于 2020-1-18 10:57
屏蔽屏幕刷新,屏蔽事件响应,换成数组处理

麻烦指点一下

TA的精华主题

TA的得分主题

发表于 2020-1-18 11:22 | 显示全部楼层
本帖最后由 microyip 于 2020-1-18 15:15 编辑
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Row >= 9 And Target.Column = 1 Then
  3.         Application.ScreenUpdating = False
  4.         Application.EnableEvents = False
  5.         Call ed
  6.         Application.EnableEvents = True
  7.         Application.ScreenUpdating = True
  8.     End If
  9. End Sub
  10. Sub ed()
  11.     Dim vData As Variant, nRow As Double, vFill As Variant
  12.     With ActiveSheet
  13.         nRow = .Cells(.Rows.Count, 2).End(xlUp).Row
  14.         If nRow < 9 Then Exit Sub
  15.         With .UsedRange
  16.             vData = .Offset(1 - .Row).Resize(nRow).Value
  17.         End With
  18.         ReDim vFill(9 To UBound(vData), 1 To 1)
  19.         
  20.         For nRow = 9 To UBound(vData)
  21.             If vData(nRow, 2) = "A类钢材" And vData(nRow, 3) = "鞍山钢厂" And vData(nRow, 7) <= 0.0025 And vData(nRow, 8) <= 0.0025 And _
  22.                 vData(nRow, 10) <= 0.00085 And vData(nRow, 11) <= 0.0005 And vData(nRow, 18) <> "不合格" Then
  23.                 vFill(nRow, 1) = "A"
  24.                 End If
  25.         Next
  26.         .Cells(9, 23).Resize(UBound(vFill) - 8) = vFill
  27.     End With
  28. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-18 11:22 | 显示全部楼层
liulang0808 发表于 2020-1-18 10:31
一、关闭屏幕刷新
二、考虑数组处理吧

版主,麻烦指点一下如何用数组修正代码及屏蔽屏幕刷新,屏蔽事件响应问题

TA的精华主题

TA的得分主题

发表于 2020-1-18 11:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 microyip 于 2020-1-18 15:16 编辑

附上附件以供参考

求助(by.micro).rar

81.11 KB, 下载次数: 7

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

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 06:10 , Processed in 0.045406 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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