Arrays 在数组中查找或在Excel中快速查找
我有两个射程 表(1)中从第二行到最后一行的第一个范围(“D:D”),这是查找值,140.000行Arrays 在数组中查找或在Excel中快速查找,arrays,vba,excel,Arrays,Vba,Excel,我有两个射程 表(1)中从第二行到最后一行的第一个范围(“D:D”),这是查找值,140.000行 x1 = Worksheets("1").range(Worksheets("1").Cells(2, "D").Address, Worksheets("1").Cells(Rows.Count, "D").End(xlUp)).value x2 = Worksheets("2").range(Worksheets("2").Cells(2, 4).Address, Worksheets("2
x1 = Worksheets("1").range(Worksheets("1").Cells(2, "D").Address, Worksheets("1").Cells(Rows.Count, "D").End(xlUp)).value
x2 = Worksheets("2").range(Worksheets("2").Cells(2, 4).Address, Worksheets("2").Cells(Rows.Count, 1).End(xlUp)).value
第二个范围(“A:D”)在第(2)页中,从第二行到最后一行,这是tabble_数组,500.000行
x1 = Worksheets("1").range(Worksheets("1").Cells(2, "D").Address, Worksheets("1").Cells(Rows.Count, "D").End(xlUp)).value
x2 = Worksheets("2").range(Worksheets("2").Cells(2, 4).Address, Worksheets("2").Cells(Rows.Count, 1).End(xlUp)).value
这里我试图查找数组内部
ReDim ListBoxArrSplitToRows(1 To 4, 1 To UBound(x2, 1))
CX = UBound(x2, 2)
For ii = 2 To UBound(x1, 1)
For i = 1 To UBound(x2, 1)
SearchInst = x2(i, 1)
txt = x1(ii, 1)
If InStr(SearchInst, txt) Then
zz = zz + 1
For counter = 1 To 4
ListBoxArrSplitToRows(counter, zz) = x2(i, counter)
Next counter
Else
End If
Next i
Next ii
If zz <> 0 Then ReDim Preserve ListBoxArrSplitToRows(1 To 4, 1 To zz) Else ReDim ListBoxArrSplitToRows(0, 0): MsgBox "No matches"
Worksheets(1).Cells(2, "E").Resize(UBound(ListBoxArrSplitToRows, 2), 3) = ListBoxArrSplitToRows
ReDim listboxarrsplitorows(1到4,1到UBound(x2,1))
CX=UBound(x2,2)
对于ii=2至UBound(x1,1)
对于i=1到UBound(x2,1)
SearchInst=x2(i,1)
txt=x1(二,1)
如果InStr(SearchInst,txt)则
zz=zz+1
对于计数器=1到4
ListBoxArrSplitToRows(计数器,zz)=x2(i,计数器)
下一个柜台
其他的
如果结束
接下来我
下一个ii
如果zz为0,则重拨保留ListBoxArrSplitToRows(1到4,1到zz),否则重拨ListBoxArrSplitToRows(0,0):MsgBox“无匹配项”
工作表(1).单元格(2,“E”).调整大小(UBound(ListBoxArrSplitToRows,2),3)=ListBoxArrSplitToRows
ii=3
Ubound(x1,1)=136586
Ubound(x2,1)=496369
zz=1
如何快速查找两个大范围,因为代码查找值需要30分钟,而且太长据我所知,导致“下标超出范围”错误的原因是
zz
大于UBound(x2,1)
,这使得它超出了listboxarrsplitorows
的范围
快速解决方法是移动这条线
If zz <> 0 Then ReDim Preserve ListBoxArrSplitToRows(1 To 4, 1 To zz)
如果zz为0,则ReDim Preserve listboxarrsplitorows(1到4,1到zz)
向上一行,即在
下一个i
之前。尽管去掉了否则ReDim listboxarrsplitorows(0,0)
;我不知道这能达到什么效果。当错误出现时,zz
的值是多少?这是一段很长的时间,我刚刚格式化为,如果没有找到匹配项,则使用ReDim ListBoxArrSplitToRows(0,0)重置数组。我知道,但这能达到什么效果?为什么要这样做?如果不这样做,列表框将充满空行