在excel中将表数组作为范围读取是否有限制?

在excel中将表数组作为范围读取是否有限制?,excel,vba,Excel,Vba,这里是vba宏的新手,我正在尝试使用我在下面的链接中找到的vba代码,但是当我有一个很大的范围时,它不起作用 我有一个vba函数,可以在C16000:C16954范围内工作,但不能在C116000:C116954范围内工作,尽管它们读取的行数相同 FuzzyvLookup(B2,D16000:D16954,1) = "SOME VALUE" FuzzyvLookup(B2,D116000:D116954,1) = #N/A when i expect it to be

这里是vba宏的新手,我正在尝试使用我在下面的链接中找到的vba代码,但是当我有一个很大的范围时,它不起作用

我有一个vba函数,可以在C16000:C16954范围内工作,但不能在C116000:C116954范围内工作,尽管它们读取的行数相同

    FuzzyvLookup(B2,D16000:D16954,1) = "SOME VALUE" 
    FuzzyvLookup(B2,D116000:D116954,1) = #N/A when i expect it to be 
    FuzzyvLookup(B2,D116000:D116954,1) = "SOME VALUE"
有什么建议说明原因吗

添加了指向我所指的宏代码的链接:(太长了,所以我没有粘贴到这里!) 您可以这样做:

Function FuzzyvLookup(myRange As range, strLookup As String, lookupType)

    ' lookup type
    ' 1 first
    ' 2 mid
    ' 3 last
    ' 0 all

    Dim a() As Long
    myRow = 2
    myCol = 2
    ReDim a(myRow - 1, myCol - 1) As Long
    a(0, 0) = 9
    a(1, 0) = 6
    a(0, 1) = 9
    a(1, 1) = 6
    Dim myVal
    myVal = ""
    For b = 1 To myRange.Rows.Count
        If lookupType = 1 And myRange.Item(b, 1) Like strLookup & "*?" Then
            myVal = myRange.Item(b, 2)
            Exit For
        End If
        If lookupType = 2 And myRange.Item(b, 1) Like "?*" & strLookup & "*?" Then
            myVal = myRange.Item(b, 2)
            Exit For
        End If
        If lookupType = 3 And myRange.Item(b, 1) Like "?*" & strLookup Then
            myVal = myRange.Item(b, 2)
            Exit For
        End If
        If lookupType = 0 And myRange.Item(b, 1) Like "*" & strLookup & "*" Then
            myVal = myRange.Item(b, 2)
            Exit For
        End If
    Next b
    FuzzyvLookup= myVal
End Function
在您的单元格中,可以测试此宏:

Macro1(D16000:D16954, B2, 1) 

备注:1表示首先(从字符串的字符1开始)

您有什么excel版本?你到底是如何调用这个函数的?您对函数return做了什么?您会遇到什么错误?首先,将
Integer
的所有实例更改为
Long
。使用
Integer
在这里是不好的做法。^换句话说,原始开发人员没有通过:-)。有关
Integer
的限制,请参阅
-32768到32767
。Excel的行数超过了
Integer
所能处理的行数。在
Integer
上执行查找/替换,更改为
Long
@BigBen我刚刚在更改为Long后再次测试了该函数,它工作了!非常感谢。