Excel Office 365、Concat 和 2x VLookup 生成唯一字符串

Excel Office 365, Concat and 2x VLookup to generate a unique string

我正在尝试通过组合两个变量限制之间的所有单元格来创建文本字符串。

这个功能实际上是我想要的,但在Excel中不起作用:

=CONCAT(VLOOKUP("Yes",X2:AA257,4,0):VLOOKUP("Yes",Y2:AA257,3,0))

我确实有一个变体,它使用宏强制将一串 vlookup 单元格地址转换为公式并对其进行计算,但它笨重且缓慢,并且使用宏使得共享与其他人一起归档。

我知道这两个函数都有效:

 - =CONCAT(AB2:AB257)
 - =CONCAT(VLOOKUP("Yes",X2:AA257,4,0),VLOOKUP("Yes",Y2:AA257,3,0))

那么为什么组合版本不用冒号而不是逗号?

'start string'指令变量在Y列,'end string'指令变量在Z列,汇编成字符串的数据在AA列。值得注意的是,我之后的函数使用 VLOOKUP 返回第一个匹配的结果并忽略下面的所有内容,这就是我处理可变字符串长度的方式 - 字符串可能需要从四个之间的任何位置绘制到目前为止有 60 个单元格,我看到的最高值是 233 个单元格,所以 255 个似乎是合理的未来证明。

我想另一种选择是在 CONCAT 括号中有 255 组 ...,IF(VLOOKUP... 但如果出现问题,则更难排除故障,我我不确定如何定义一个字符串范围的结尾和下一个字符串范围的开头;可能是堆叠的 IF,具有更多的复杂性惩罚?

你可以使用 MATCH 和 OFFSET 的扩展形式来做你想做的事情。

MATCH 会找到一个匹配值,就像 VLOOKUP 一样,但它 return 是匹配值的位置而不是值本身(例如,如果你给它输入范围 X2:AA257 并且它找到第 10 行中的值,它将 return 9).

OFFSET 将 return 单元格中的值与您提供的原始单元格相距一定距离,例如 =OFFSET($C$1,5,10) 将 return 中的值单元格 H11(距单元格 C1 5 行 10 列)。在其扩展形式中,您可以为其指定宽度和高度,例如 =OFFSET($C$1,5,10,2,2) 将为您指定范围 H11:I12.

然后您可以将 OFFSET 的输出输入 CONCAT,它会给您想要的结果。

额外提示:TEXTJOIN 完成 CONCAT 所做的一切,但您也可以给它一个分隔符 - 例如 =TEXTJOIN(", ",0,A1:A10) 将 return 十个单元格中的值每个之间有一个逗号和 space。