【VBA】在VBA内部实现高速化Vlookup检索

vlookup是在excel中最常使用的函数之一
但是当数据量非常大的时候
大量的vlookup会吃掉excel内存,导致文件变得很慢
下面提供一段vba的代码,让你在vba内部实行和vlookup完全一致的能力
因为使用的是在数组中比对数据的做法,计算速度会比在表内计算要提高数倍
在数据非常大量的情况下很适合使用

缺点是只能在vba内部使用,在外部不会留下函数,修改也只能在vba内部修改
以下是简单的代码外加注释说明

Function A_Vlookup()

Dim Lsr As Long, SHTname As String, VEV As String '定义三个变量,最终行,表名称,和vlookup取得值
Dim DataArray() As String                                   '定义一个数组
SHTname = "sheet1"
Set SHT_INPUT = Worksheets(SHTname)        '选中需要vlookup的表

With SHT_INPUT
 Lsr = .Cells(Rows.Count, 1).End(xlUp).Row    '取得第一列的最后一个数据,以此作为数组最终行数据

  For j = 0 To 4     '用j循环取值所需的列
   ReDim Preserve DataArray(Lsr - 1, j) '每次循环取值都制造一个新的空列,从0到4
   For i = 1 To Lsr
    DataArray(i - 1, j) = .Cells(i, j + 1).Value '把excel内的数据按照列单位一一取入数组
   Next i
 Next j

 On Error Resume Next '因为在vba内使用vlookup,NA状态就成为error,所以此行必须
  VEV = WorksheetFunction.VLookup(Format(.Cells(1, 7).Value, "@"), DataArray, 2, 0) '数组全是文字列,因此使用worksheetfunction功能直接从所定单元格进行查找,之后的部分就是熟悉的配方
 On Error GoTo 0 '因为使用了resume next,此行必须,将error回归到0,以便下面出现error仍能启动debug机能
  .Cells(1, 8).Value = VEV  '在所定单元格导入查找结果
  VEV = "" '使用后清除变数内容,因为使用了跳过error机能,没有此行将有可能返回以前数据
End With

End Function

  • 1
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值