公式原文:
=TEXTJOIN("", TRUE, IF((Sheet1!A:A = A2) * (INDEX(Sheet1!D2:Z1000, MATCH(A2, Sheet1!A:A, 0), 0) <> 0), INDEX(Sheet1!D2:Z1000, MATCH(A2, Sheet1!A:A, 0), 0), ""))
各部分解释:
1. MATCH(A2, Sheet1!A:A, 0)
- 在
Sheet1的 A 列中查找当前工作表的A2单元格的值。 - 返回第一次匹配的行号(相对位置)。
2. INDEX(Sheet1!D2:Z1000, MATCH(...), 0)
- 使用
MATCH找到的行号,在Sheet1!D2:Z1000区域中提取该行的 整行数据(从 D 列到 Z 列)。 0表示返回整行。
3. (Sheet1!A:A = A2)
- 对
Sheet1!A:A整列进行条件判断,得到一列布尔值(TRUE/FALSE),表示哪些行的 A 列值等于当前表的A2。
4. (INDEX(...) <> 0)
- 对取出的行内容判断是否不等于 0,形成一个数组判断。
5. IF(...)
- 如果同时满足:
Sheet1!A:A = A2(当前行匹配);INDEX(...) <> 0(对应列的值不为 0);
- 则返回该行的值,否则返回空字符串。
6. TEXTJOIN("", TRUE, ...)
- 将符合条件的值连接成一个字符串。
""表示不加分隔符;TRUE表示忽略空单元格。
总体功能总结:
这个公式的目的是:
举个例子:
假设 Sheet1 内容如下:
| A | B | C | D | E | F | … |
|---|---|---|---|---|---|---|
| ID1 | 0 | 3 | 5 | |||
| ID2 | 1 | 0 | 2 |
当前工作表中 A2 = ID2,那么:
MATCH(A2, Sheet1!A:A, 0)返回 2INDEX(Sheet1!D2:Z1000, 2, 0)提取的是1, 0, 2, ...- 非 0 的值为
1和2 TEXTJOIN("", TRUE, {1, "", 2})=>"12"
如果你希望我根据你的具体需求修改优化这个公式,也可以告诉我你想达到什么效果。
正文完