根据单元格中的非空白值跨行连接标题行值

Posted

技术标签:

【中文标题】根据单元格中的非空白值跨行连接标题行值【英文标题】:JOIN header row values across a row based on non-blank values in cells 【发布时间】:2021-08-27 23:28:38 【问题描述】:

所以我有两行:

ID TagDog TagCat TagChair TagArm Grouped Tags (need help with this)
1 TRUE TRUE TagDog,TagArm

第 1 行主要由标签组成,而第 2+ 行是条目。此数据将 ENTRIES 与 TAGS 联系起来。

我需要做的是连接/加入每个条目的标签名称。例如,看看上面的最后一列。

我怀疑我们可以编写一个公式:

在行中创建一个非空单元格数组。 (即:[2,4]) 将其与标题行一起返回A(即:[A2,A4]) 然后join他们一起用逗号

但我不确定如何编写公式,或者这是否是最好的方法。

【问题讨论】:

我必须为我糟糕的英语水平道歉。我想确认一下我对您的目标的理解是否正确。在您的表格中,当TagDog,TagArm 的单元格为“F2”时,=JOIN(",",FILTER($B$1:$E$1,B2:E2=TRUE)) 的示例公式是您期望的结果吗?如果我误解了您的问题,我深表歉意。 【参考方案1】:

公式如下:

=
  "Grouped Tags (need help with this)";
  ARRAYFORMULA(
    REGEXREPLACE(TRIM(
      TRANSPOSE(QUERY(TRANSPOSE(
        IF(NOT(B2:E11),, B1:E1)
      ),, COLUMNS(B1:E1)))
    ), "\s+", ",")
  )

使用的技巧称为垂直查询粉碎。就是这样:

TRANSPOSE(QUERY(TRANSPOSE(...),, Nnumber_of_columns))

你可以找到这个人和他的朋友here的简要描述。

【讨论】:

难以置信!谢谢!【参考方案2】:

我无法创建一个可以为我执行此操作的公式,因此我在 Sheets 的查找/替换工具中使用了一个公式,它就像一个魅力!

我进行了查找/替换,将 TRUE 的所有实例替换为以下公式:

=INDIRECT(SUBSTITUTE(LEFT(ADDRESS(ROW(),COLUMN()),3),"$","")&"$1")

这个公式的作用是找到单元格的字母,然后使用INDIRECT获取单元格的第一行。

分解公式:

ADDRESS(ROW(),COLUMN()) 返回直接引用:$H$1 LEFT("$H$1",3) 返回$H$ SUBSTITUBE("$H$","$","") 替换美元符号 ($) 并返回 H INDIRECT(H&"$1") 引用确切的单元格H$1

现在,我可以用该公式替换 TRUE 的所有实例,神奇的事情发生了!

这里有视频解释:https://youtu.be/SXXlv4JHDA8

希望这对某人有所帮助 - 但是,我仍然有兴趣了解此解决方案的公式。

【讨论】:

如果可以将公式复制下来还有另一种方法:=TEXTJOIN(",", 1, ARRAYFORMULA(IF(NOT(B2:E2),, $B$1:$E$1)))(screen) 在查找和替换中,您可以将其替换为 =OFFSET(A1, 0, COLUMN() - 1, 1, 1)

以上是关于根据单元格中的非空白值跨行连接标题行值的主要内容,如果未能解决你的问题,请参考以下文章

使用第一个空白上方单元格中的值填充非连续空白单元格

用上面单元格中的值查找并替换空白值[重复]

搜索包含文本的单元格并在下一个空白单元格中粘贴值

自定义表格单元格中的堆栈视图

VBA如何将单元格中的年份转为天数

在 Excel 中重复宏,直到到达空白单元格