Arrays 在数组中查找或在Excel中快速查找

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

我有两个射程

表(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").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)重置数组。我知道,但这能达到什么效果?为什么要这样做?如果不这样做,列表框将充满空行