我尝试使用非连续的 xlookup 及其内部的选择函数,但它似乎不返回超过 255 个字符的单元格内容 (#VALUE!)。有什么办法可以解决这个问题吗?
公式如下:
=XLOOKUP(O4&,E4:E47,CHOOSE({1,2,3},E4:E47,F4:F47,K4:K47))
我在网上找遍了也没找到任何东西。
答案1
使用选择连接非连续数组或列的问题
看起来,如果您在 CHOOSE 中使用数组索引(例如 CHOOSE( {1,2}, ...)),它会将返回值截断为最多 255 个字符,至少对于文本值而言是这样。具有讽刺意味的是,如果您使用标量索引(例如 CHOOSE(2, ...)),似乎没有字符限制。
这里的一个解决方法可能是使用 Google 表格,因为 CHOOSE 不仅可能不会有这个特定的错误,而且您实际上可以使用 构建非连续矩阵{ E4:E47, F4:F47,K4:K47 }
。
Excel 查找不连续返回数组或表的解决方案
答:一个明显的解决方案是对每个返回列使用单独的 XLOOKUP 函数。
=XLOOKUP(O4,E4:E47,E4:E47)
=XLOOKUP(O4,E4:E47,F4:F47)
=XLOOKUP(O4,E4:E47,K4:K47)
不幸的是,这种方法效率很低,对于相同的搜索值,需要进行 3 倍以上的查找搜索。更不用说如果返回列数发生变化,难度也会增加。
B.如果您可以将所有返回列集中在一个范围内,例如 E4:K47,则可以使用 VLOOKUP:
=VLOOKUP(O4,E4:K47,{1,2,7},FALSE)
C.或者 INDEX 到 XLOOKUP 返回整行数组:
=INDEX(XLOOKUP(O4,E4:E47,E4:K47),,{1,2,7}) ...which may be faster
D.最后,如果您的数据确实分散且不连续,请使用 MATCH 和 INDEX 构建您自己的 LOOKUP 函数:
=INDEX((E4:E47,F4:F47,K4:K47),MATCH(O4,E4:E47,0),,{1,2,3})
该解决方案的优点在于 INDEX 自然允许您指定不连续的区域(例如,在进行选择时按住 CTRL)。
我仍然不确定 A 到 D 中的哪一个解决方案是最快的。我怀疑使用静态数组作为函数参数可能会多次执行相同的函数。我押注 D 或 C。
注意:对于 Office 365 之前的版本,请记住在编辑等于返回数组长度的多个单元格时使用 CTRL+SHIFT+ENTER (CSE) 完成数组公式。在 Office 365 中,公式将自动洒进入相邻的单元格。