Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 我有一个vba代码,可以在一个单元格中返回多个匹配项,但是执行起来需要很长时间。有没有办法加速宏_Excel_Vba - Fatal编程技术网

Excel 我有一个vba代码,可以在一个单元格中返回多个匹配项,但是执行起来需要很长时间。有没有办法加速宏

Excel 我有一个vba代码,可以在一个单元格中返回多个匹配项,但是执行起来需要很长时间。有没有办法加速宏,excel,vba,Excel,Vba,每次阅读某个范围都会降低性能,因此需要尽量减少阅读次数。一种方法是首先将数据读入数组,然后使用这些数组 选项显式 函数VLOOKUP1(lookupval、lookuprange作为范围、indexcol作为长度) Dim r为长、arr、arr2、sep为字符串、结果为字符串 arr=lookuprange.Value'读取数组的范围 arr2=lookuprange.Offset(0,indexcol-1).Value '循环查找列值 对于r=1至UBound(arr,1) 如果arr(r,

每次阅读某个范围都会降低性能,因此需要尽量减少阅读次数。一种方法是首先将数据读入数组,然后使用这些数组

选项显式
函数VLOOKUP1(lookupval、lookuprange作为范围、indexcol作为长度)
Dim r为长、arr、arr2、sep为字符串、结果为字符串
arr=lookuprange.Value'读取数组的范围
arr2=lookuprange.Offset(0,indexcol-1).Value
'循环查找列值
对于r=1至UBound(arr,1)
如果arr(r,1)=lookupval,则
结果=结果、sep和arr2(r、1)
sep=“,”在第一个值后添加分隔符
如果结束
下一个r
VLOOKUP1=结果
端函数

indexcol在函数中不会更改,因此将其从循环中删除,并在For Each之前进行计算,然后在循环中使用已计算的变量。范围的大小是多少
lookuprange
?@TimWilliams-MIS数据(数据库)大约有70000行50列,大约有35000个值(主表)要在数据库中进行哪些搜索,并在主表单中更新结果?我发布的代码是否更快?有了这么多数据,您最好使用sub来执行匹配,或者使用某种字典查找。
Option Explicit

Function VLOOKUP1(lookupval, lookuprange As Range, indexcol As Long)

Dim r As Range    
Dim result As String

result = vbNullString

For Each r In lookuprange

    If r = lookupval Then

        result = result & " , " & r.Offset(0, indexcol - 1)

    End If

Next r

VLOOKUP1 = result 

End Function