如果下面行中的值非空白,则连接列标题

Posted

技术标签:

【中文标题】如果下面行中的值非空白,则连接列标题【英文标题】:Concatenate column headers if value in rows below is non-blank 【发布时间】:2017-03-29 21:50:16 【问题描述】:

我有以下格式的数据表。

Data

我希望完成的表格中的空白列像下面突出显示的那样被填充。

Finished Table

所以,我需要一个公式或 VBA 来返回并连接每行中非空白单元格的标题。

【问题讨论】:

到目前为止你尝试过什么?至少,嵌套的 IF() 语句看起来可以工作。 我尝试了一个 IF 函数,但出现了参数过多的错误 【参考方案1】:

使用¹以下作为数组公式

=TEXTJOIN("-->", TRUE, IF(LEN(C3:I3), C$2:I$2, ""))

Excel 2016 之前的版本

虽然您可以将一系列 IF 语句串在一起,但更简洁的替代方法可能是编写用户定义的函数(又名 UDF)。

在标准 VBA 模块代码表中:

Function udf_Stitch_Together(r As Range, _
                             h As Range, _
                             Optional d As String = "-->", _
                             Optional blnks As Boolean = False) As String
    Dim s As String, c As Long
    For c = 1 To r.Cells.Count
        If CBool(Len(r.Cells(c).Text)) Then _
            s = s & IIf(Len(s), d, vbNullString) & h.Cells(c).Text
    Next c
    udf_Stitch_Together = s
End Function


¹ TEXTJOIN 在以下版本中随 Excel 2016 一起推出:适用于 android 手机的 Excel、Excel Mobile、带有 Office 365 的 Excel 2016、Excel 2016 for Mac、Excel Online、Excel for iPad、 Excel for iPhone 和 Excel for Android 平板电脑。

【讨论】:

聪明!我在玩TextJoin(),但找不到一种只用值填充单元格的好方法。 我使用的是 Excel 2010,但它无法识别 TEXTJOIN 公式。但看起来这正是我想做的。我的 excel 版本有什么类似的公式吗? 这取决于您要检查的 实际 列数。即使是七个嵌套的 IF 条件,七列也不超出范围,但公式更短。 共有10列

以上是关于如果下面行中的值非空白,则连接列标题的主要内容,如果未能解决你的问题,请参考以下文章

R:仅当同一列中的两行中的值为真时才将值添加到 [row,column]

shell命令中的条件测试与判断语句

最短路径 Dijkstra 算法为啥边上的权值非负阿?

最短路径算法(Dijkstra)

如果单元格值包含列名,则 Excel 行中的值的平均值

非递减有序集合合并