ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 莫悠悠

[求助] 请问高手如何提高脚本运算速度

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-1 16:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub Vlookup()
  2.     '--------------------------
  3.     ' 定义变量
  4.     Dim i%, r%, L, S
  5.     Dim sh1 As Worksheet
  6.     Dim sh2 As Worksheet
  7.     Dim Sh1ColList As String
  8.     Dim Sh2ColList As String
  9.     Dim X As Long
  10.     '----------------------------
  11.     Application.ScreenUpdating = False
  12.     On Error Resume Next
  13.     '从“列表”工作表中取数的列次
  14.     Sh1ColList = "4,5,6,7,8,9,10,16,17,20,21,22,23"
  15.     '写到“筛选”工作表的对应列次
  16.     Sh2ColList = "17,18,19,20,21,22,23,24,25,26,27,28,29"
  17.     Set sh1 = ThisWorkbook.Sheets("列表")
  18.     Set sh2 = ThisWorkbook.Sheets("筛选")
  19.     r = sh1.Range("A65536").End(xlUp).Row '列表已使用行数
  20.     i = sh2.Range("A65536").End(xlUp).Row '筛选已使用行数
  21.     ' 将 列表 工作表的数据导入数组
  22.     With sh1
  23.         MaxCol = .Cells(1, .Columns.Count).End(xlToLeft).Column '第1行最后一列
  24.         MaxRow = .Cells(.Rows.Count, 1).End(xlUp).Row '第1列最后一行
  25.         sh1arr = .Range(.Cells(1, 1), .Cells(MaxRow, MaxCol)).Value
  26.     End With
  27.     ' 整理 筛选 工作表,删除部分数据
  28.     sh2.Range("Q3:AC" & i).ClearContents
  29.     sh2.[Q3:AC3] = Split("最新,涨幅,换手,量比,DDX,DDY,DDZ,BBD,单比,特差,大差,中差,小差", ",")
  30.     ' 将 筛选 工作表的数据导入数组
  31.     With sh2
  32.         MaxCol = .Cells(3, .Columns.Count).End(xlToLeft).Column '第1行最后一列
  33.         MaxRow = .Cells(.Rows.Count, 1).End(xlUp).Row '第1列最后一行
  34.         sh2arr = .Range(.Cells(4, 1), .Cells(MaxRow, MaxCol)).Value
  35.     End With
  36.     '将“列表”工作表和“筛选”工作表相对应的列次分割到数组中
  37.     sh1colarr = Split(Sh1ColList, ",")
  38.     sh2colarr = Split(Sh2ColList, ",")
  39.     ' 按照 筛选 数组的成员数进行循环(不包含标题,从1开始)
  40.     For S = 1 To UBound(sh2arr)
  41.         ' 按照 列表 数组的成员数进行循环(包含标题,从2开始)
  42.         For L = 2 To UBound(sh1arr)
  43.             '判断两个数组的股票代码是否一致
  44.             If sh2arr(S, 1) = sh1arr(L, 1) Then
  45.                 '一致时,将列表中的相应列次的数据写入到筛选工作表数组中
  46.                 For X = 0 To UBound(sh1colarr)
  47.                     sh2arr(S, sh2colarr(X)) = sh1arr(L, sh1colarr(X))
  48.                 Next
  49.                 Exit For
  50.             End If
  51.         Next
  52.     Next
  53.     '将处理后的数组内容写入到 筛选 工作表中
  54.     sh2.Range("A4").Resize(UBound(sh2arr, 1), UBound(sh2arr, 2)).Value = sh2arr
  55.     Application.ScreenUpdating = True
  56. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-6-1 16:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png 代码回复需要审核。

TA的精华主题

TA的得分主题

发表于 2024-6-1 16:26 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-1 16:36 | 显示全部楼层
边缘码农 发表于 2024-6-1 16:25
代码回复需要审核。

非常感谢,谢谢解释这么清晰,认真学习一下字典和数组(对这个一直都是懵逼得很)

TA的精华主题

TA的得分主题

发表于 2024-6-2 11:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
嵌套字典+数组 VLOOKUP求助.zip (58.56 KB, 下载次数: 4)

TA的精华主题

TA的得分主题

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

非常强大,我原来的脚本要花10几秒的时间,您这个脚本1秒不到就出结果,要向各位大佬学习

TA的精华主题

TA的得分主题

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

将您的脚本放入原文件执行,出现类型不匹配提示,运行错误”13“

TA的精华主题

TA的得分主题

发表于 2024-6-2 12:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
应该是股票代码数据类型的问题

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-2 12:53 | 显示全部楼层

有个问题是执行添加数据后筛选里的股票代码会数值化,如000037会转为37

TA的精华主题

TA的得分主题

发表于 2024-6-3 09:52 | 显示全部楼层
莫悠悠 发表于 2024-6-2 12:53
有个问题是执行添加数据后筛选里的股票代码会数值化,如000037会转为37

我在测试中也有这个问题,两个工作表中涉及到股票代码的列,先设置成文本格式试试。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 06:54 , Processed in 0.045293 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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