ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 遍历单元格问题,耗时较长,能否简化

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-28 12:03 | 显示全部楼层 |阅读模式
求助各位大神,这个目的是将sheet1里满足条件的单元格粘贴到sheet2,实际应用时一旦sheet1里非空单元格较多或参数调整不当就会导致需运行几十分钟才完成,看各位大神能否用数组或者其他说明方式帮我简化一下,感谢~~~我是新手....
另这段vba运行结果是没问题的,其中r,l,t等几个参数是要随时调整的,所以我单独列出来,显得很乱,另Cells(i - 1 + r, k + 101 + l))之类的也是我调整之后的表达方式,也比较乱,感谢大家~~

工作表.rar

40.76 KB, 下载次数: 30

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-28 12:05 | 显示全部楼层
Sub scu()

Sheets("Sheet1").Select
Dim i, k, p, r, l, t As Long

r = 6

l = 6

t = 1

For k = 1 To 100
    For i = 18 To 160
            Sheets("Sheet1").Select
            p = Application.WorksheetFunction.CountA(Range(Cells(i, k), Cells(i - 1 + r, k - 1 + l)))
        If p <= t Then
        Sheets("Sheet1").Select
        Range(Cells(i, k + 102), Cells(i - 1 + r, k + 101 + l)).Copy Sheets("Sheet2").[C65500].End(xlUp).Offset(2)
        
        End If
    Next
Next


Beep

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-28 12:05 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-28 12:55 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-11-28 13:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-11-28 13:45 | 显示全部楼层
  1. Sub Test()
  2.     Dim shSource As Worksheet, shResult As Worksheet
  3.     Dim rgStart As Range, rgArea As Range, lngCurRowID As Long
  4.     Dim lngResize_Row As Long, lngResize_Col As Long
  5.     Dim lngOffSet_Row As Long, lngOffSet_Col As Long
  6.     Dim lngCountMax As Long, lngGetOffSet As Long, lngTitleStep As String
  7.    
  8.     Set shSource = Sheets("Sheet1") '原数据表
  9.     Set shResult = Sheets("Sheet2") '结果数据表
  10.    
  11.     lngResize_Row = 6 '判断区域的行数
  12.     lngResize_Col = 6 '判断区域的列数
  13.     lngCountMax = 1 '判断条件
  14.     lngTitleStep = 2 '结果填充时,顶部的空行数
  15.     lngCurRowID = shResult.Range("C" & Rows.Count).End(xlUp).Row + lngTitleStep '起始填充的行号
  16.     lngGetOffSet = 102 '提取区域,与判断区域的 列 偏移数
  17.    
  18.     Set rgStart = shSource.Range("A18") '起始判断区域
  19.     Application.ScreenUpdating = False
  20.     Application.Cursor = xlWait
  21.     For lngOffSet_Col = 0 To 99 '列偏移量,
  22.         For lngOffSet_Row = 0 To 142 '行偏移量
  23.             '判断区域=起始区域进行行、列偏移后,再扩展到相应的行、列数
  24.             Set rgArea = rgStart.Offset(lngOffSet_Row, lngOffSet_Col).Resize(lngResize_Row, lngResize_Col)
  25.             If Application.WorksheetFunction.CountA(rgArea) <= lngCountMax Then
  26.                 rgArea.Offset(0, lngGetOffSet).Copy shResult.Range("C" & lngCurRowID)
  27.                 '填充行号=起始填充行+判断区域的行数+顶部空行数
  28.                 lngCurRowID = lngCurRowID + lngResize_Row + lngTitleStep
  29.             End If
  30.         Next
  31.     Next
  32.     Application.ScreenUpdating = True
  33.     Application.Cursor = xlDefault
  34.     MsgBox "OK"
  35.    
  36.     Beep
  37. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-11-28 14:02 来自手机 | 显示全部楼层
lsdongjh 发表于 2019-11-28 13:45

请问你这是在什么软件里写的代码?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-28 14:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

相当快,1秒钟出结果~~~我之前真的用过1个多小时的....

TA的精华主题

TA的得分主题

发表于 2019-11-28 14:58 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-28 16:20 | 显示全部楼层

好用是很好用,但大神这是什么原理呢,求解啊,我看半天看不出来两者的差别何在,我就是一小白....
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 10:21 , Processed in 0.040411 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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