我正在尝试设置值列表的映射。一行中的一个单元格包含 ID 或行号列表,同一行中的另一个单元格包含映射值列表。
如果您正在做一些基本的数学运算,这对于 JOIN、ARRAYFORMULA 和 SPLIT 来说非常简单,例如:
A1: =1,2,3
A2: =JOIN(",",ArrayFormula(SPLIT(A1,",")+1))
A2: displays "2,3,4" (correct)
这似乎不适用于 LOOKUP 和 SPLIT(也尝试过 LOOKUP 和 REGEXEXTRACT)。具体来说,即使使用可变参数,我也可以让它工作,但是一旦我更改行,值就会中断。例子:
A column: ids (e.g. 1,2,3,4)
C column: names (e.g. "Apple", "Banana", "Custard")
E7: =1,2,3
F7: =JOIN(",",ArrayFormula(LOOKUP(SPLIT($E7, ","), $A:$A, $C:$C)))
F7 displays "Apple,Banana,Custard" (correct)
以上是正确的行为。但是,如果我将第 1 行(id 1)拖到不同的地方,公式就会中断。
F7 displays "#N/A Did not find value `1` in LOOKUP evaluation"
该行为并非特定于 LOOKUP 或 SPLIT,因为我也使用 VLOOKUP 和 REGEXEXTRACT 进行了尝试(实际上,使用 REGEXEXTRACT 更难支持可变列表大小)。
解决方案
它在使用“=ROW()”时有效。正如 AdamL 所指出的,实际问题是 is_sorted 标志需要为 false(如果您想支持拖放)
E7: =ROW(A2)&","&ROW(A3)&","&ROW(A4)
F7: =JOIN(",",ArrayFormula(VLOOKUP(SPLIT($E7, ","), $A:$C, 3, 0)))
F7 displays correct value even after dragging row 1