A2匹配Sheet1!A列数据,如果能匹配从Sheet1的D到Z列中取出非0的值,并将它们组合填充

94次阅读
没有评论

公式原文:

=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) 返回 2
  • INDEX(Sheet1!D2:Z1000, 2, 0) 提取的是 1, 0, 2, ...
  • 非 0 的值为 12
  • TEXTJOIN("", TRUE, {1, "", 2}) => "12"

如果你希望我根据你的具体需求修改优化这个公式,也可以告诉我你想达到什么效果。

正文完
 0
评论(没有评论)