VLOOKUP 上的 255 个字符限制

VLOOKUP 上的 255 个字符限制

使用excel2003,公式:

=VLOOKUP(D1 ,A1:B135, 2)

如果 D1 的长度超过 255 个字符,则失败(即,列表中的一些文本长度超过 255 个字符,D1 具有相同的文本值,并且 VLOOKUP 返回 #VALUE!)。

MATCH 似乎也受到同样的字符限制。

我找不到任何关于这些限制的官方确认,例如这里:

http://office.microsoft.com/en-us/excel-help/vlookup-HP005209335.aspx

或者这里:

http://office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP005199291.aspx?CTT=3

我知道 excel 对公式中使用的文本长度有 255 的限制,但它表明 connate 应该可以工作(在这种情况下它不起作用,而且我没有在公式中使用字符串,而是引用了另一个单元格)。

有人可以确认这些限制是否存在(我有可能做错了其他事情)?

更重要的是,有人知道解决这些问题的方法吗?

谢谢

答案1

您始终可以编写自己的 VLOOKUP...但是,作为替代方案,您可以从查找值计算哈希值,并将其用作新的查找值。

可能会发生冲突,但使用像 MD5 这样的稍微不错的哈希算法,这应该不是问题。

要创建哈希函数,你可以使用以下想法https://stackoverflow.com/questions/125785/password-hash-function-for-excel-vba

答案2

在 VBA 中编写自己的查找

这是一个开始:

Function MyVL(v As Range, r As Range, os As Long) As Variant
    Dim cl As Range

    For Each cl In r.Columns(1).Cells
        If v = cl Then
            MyVL = cl.Offset(0, os - 1)
            Exit Function
        End If
    Next
End Function

答案3

我在搜索两份报告之间的精确匹配时遇到了这个问题。我将一份报告和另一份报告的几个不同字段连接成一个长字符串,然后使用 Vlookup 来确定两份报告之间 1000 条左右记录的每个字段是否匹配。就在那时,我遇到了这个问题。

因为这是一次性的事情,我可以通过将少于 255 个字符连接到 3 个单独的列中将其分解为更小的块,所以我这样做了,并编写了 3 个单独的查找,并将数据分为 3 个块而不是一次性比较。主要缺点是,在运行每个查找之前,我必须根据我想要对 3 个子组中的每一个运行查找的查找表(列)重新排序。

我认为我的解决方案对于一次性的事情来说是完全可以接受的,但如果我不得不多次这样做,我会寻找更有效的方法。

答案4

另一个考虑因素是,如果使用前 255 个字符找不到答案,则不需要它们。因此,可以在结构中嵌套查找IF()(或者IFS(),使用这个更好),并且可以在查找列中截断版本的值上进行每次连续查找。使用RIGHT()和作为长度,从单元格的长度中减去 255。

如今(2021 年),LET()已经可以使用,因此人们可以更轻松地缩短连续的长度。

当然XLOOKUP()现在也有。我不知道它的查找值字符串长度限制,但可以肯定至少是 518 个字符。

相关内容