我创建了一个用户定义的函数来显示公司可匹配的程度。这个函数效果很好,只要我用作thisRange的范围小于或接近第2800行。我有4000个公司的列表,当我尝试将这些包含在超过2800的行中时,该函数不起作用。范围只能这么大吗?有没有办法解决这个问题?
以下是代码:
Function bestMatch(company As String, thisRange As Range) As String
Dim min As Double, nextMin As Double
Dim cell As Range
Dim score As Double
Dim best As String, str As String, nextBest As String
min = 99999
nextMin = 99999
For Each cell In thisRange.Cells
str = cell.Value
substr1 = Left(str, 1)
substr2 = Left(company, 1)
score = Leven(company, str)
If score < min And substr1 = substr2 Then
min = score
best = str
ElseIf score = min And substr1 = substr2 Then
min = score
best = str + " && " + best
ElseIf score > min And score <= nextMin And substr1 = substr2 Then
nextMin = score
nextBest = str
min = min
best = best
End If
Next
If min > 15 Then
bestMatch = "No Match Found"
ElseIf min <= 15 Then
bestMatch = "1. " + best + " 2. " + nextBest
End If
End Function
答案 0 :(得分:2)
请参阅网页Excel specifications and limits
本页的部分内容包括: 工作表和工作簿规范和限制 计算规范和限制 制图规范和限制 数据透视表和数据透视图报告规范和限制 共享工作簿规范和限制
我相信范围可以和整个工作表一样大。工作表的大小限制列为1,048,576行16,384列。
在&#34;计算规范和限制中&#34;部分,选择范围的限制列为2048。
答案 1 :(得分:1)
如果您尝试首先转储数组中的所有值,该怎么办
Function bestMatch(company As String, start_cell As Range, int count) As String
Dim vals() as Variant
vals = start_cell.Resize(count,1).Value2
For i=1 to count
substr1 = Left(vals(i,1), 1)
...
Next i
...
End Function
我尝试使用&gt; 4000个单元格,没有问题。
答案 2 :(得分:0)
Range对象的子字符串存在限制,它会根据您使用的Excel版本而有所不同。但是从我记忆中来看,我很确定它不到4000,无论你有什么版本。
为了解决这个问题,你应该把它分成几个部分并使用Union。