Way to overcome Excel Vlookup function limit of 256 characters
我有一个具有多个值的Excel数组。 有些少于256个字符,有些长度大于256。
当我尝试使用示例字符串执行VLookup时,如果它与少于256个字符的行匹配,则可以获得结果。 对于大于256个字符的行,它将返回"#N / A"。
有没有一种方法可以使用Vlookup或通过使用Excel中可以克服此限制的其他一些内置函数?
如果您这样使用VLOOKUP
即在D2:D10中查找A2并从F2:F10返回结果,然后尝试使用以下公式
根据需要更改范围
编辑:
我在这里模拟了一个示例-A2:A10中的值与G2:G10相同,但顺序不同。这些值的长度在B列中显示,C列中的VLOOKUP在col A值> 255个字符时失败,但在D列中的INDEX / MATCH公式在所有情况下均有效
https://www.dropbox.com/s/fe0sb6bkl3phqdr/vlookup.xls
我遇到了同样的问题,并编写了此自定义原始vlookup。它不在乎单元格值的长度。
1 2 3 4 5 6 7 8 9 10 | Function betterSearch(searchCell, A As Range, B As Range) For Each cell In A If cell.Value = searchCell.Value Then betterSearch = B.Cells(cell.Row, 1) Exit For End If betterSearch ="Not found" Next End Function |
PS不禁要问,为什么在这种特殊情况下,由专业人员编写的原始VLOOKUP比10行功能要差得多?
这是对
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | Public Function Match2(search As String, lookupArray As Range, Optional match_type As Integer = 0) As Long Application.Volatile Dim vArray As Variant vArray = lookupArray.Value For i = 1 To UBound(vArray, 1) If match_type = 0 Then If search = vArray(i, 1) Then Match2 = i Exit Function End If Else If match_type = -1 Then If search <= vArray(i, 1) Then Match2 = i Exit Function End If Else If search >= vArray(i, 1) Then Match2 = i Exit Function End If End If End If Next End Function |
用法:
1 | Index(rangeA, Match2(LookupValue, LookupRange, 0) |
上面安斯说:
Can't help but wonder why the original VLOOKUP written by
professionals is implemented in this particular case more poorly
than this 10-lined func?
优化和性能。如果将字符数限制为255,则在CPU上仅需要2个操作,而比较可变长字符串在CPU上需要执行更多的步骤,因为必须重复比较255个字符宽度。诸如VBA之类的编程语言在很多情况下都无法解决这一问题,因为所有子操作都为您服务。
例如,要比较固定长度为5的2个字符串" Hello"和" abc",那么我们只需在CPU上执行以下操作:
1 2 3 | 0100100001100101011011000110110001101111 //Hello - 0110000101100010011000110000000000000000 //abc = -0000000000011000111111001111011010010100 //-419231380 |
现在,您可以简单地询问结果是