如果下面的列有1,则连接顶行单元格

时间:2015-02-23 17:33:22

标签: excel if-statement concatenation

我正在查看一个包含命名列的大型1s和0数据库,如下所示:

red    blue   green  orange purple
────── ────── ────── ────── ──────
0      0      1      0      1 
0      1      0      0      0 

我想连接所有标题(按行),其中行在该标题下方有一个“1”。理想情况下,第一个将等于“绿色,紫色”,第二个将只读“蓝色”。我有大量的数据,因此任何嵌套一百个“IF”函数的东西都没有意义。

我试过

  

= IF(B1:B5 = 1,CONCATENATE(A1:A5),“”)

和一些接近的事情,但我找不到明显的方法来获得它。我也没有足够的时间或足够的知识来处理VBA。感谢所有的帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

多个单元格上的字符串连接最好留给VBA 用户定义函数(又名 UDF ),即使没有设置标准。你“嵌套一百个”IF“函数”的情况肯定会把它放在这个类别中。

点击 Alt + F11 ,当VBE打开时,立即使用下拉菜单插入►模块( Alt + 中号)。将以下内容粘贴到标题为 Book1 - Module1(Code)的新窗格中。

Public Function conditional_concat(rSTRs As Range, rCRITs As Range, Optional sDELIM As String = ", ")
    Dim c As Long, sTMP As String
    For c = 1 To Application.Min(rSTRs.Cells.Count, rCRITs.Cells.Count)
        If CBool(rCRITs(c).Value2) Then _
            sTMP = sTMP & rSTRs(c).Value & sDELIM
    Next c
    conditional_concat = Left(sTMP, Application.Max(Len(sTMP) - Len(sDELIM), 0))
End Function

点击 Alt + Q 返回工作表。像任何本机Excel工作表函数一样使用此UDF。语法是,

conditional_concat(<range of strings>, <range of conditions>, [optional] <delimiter as string>)

Conditional String Concatenation

G2中的公式是,

=conditional_concat(A$1:E$1, A2:E2)

根据需要填写。

答案 1 :(得分:0)

我这样做的方法是添加五个额外的列并明确输入&#39; red&#39;,&#39; blue&#39;,&#39; green&#39;,&#39;橙色&#39;紫色&#39;其中相应的列是1 所以你可以这样做:

红栏&#39; r&#39;: =IF(col_red=1,"red,","")

蓝栏&#39; b&#39;: =IF(col_blue=1,"blue,","")

绿色栏目&#39;: =IF(col_green=1,"green,","")

橙色专栏&#39; o&#39;: =IF(col_orange=1,"orange,","")

紫色专栏&#39; p&#39;: =IF(col_purple=1,"purple,","")

并在另一列连接这些列(更改对相应列的引用等)=LEFT(F2 & G2 & H2 & I2 & J2,LEN(F2 & G2 & H2 & I2 & J2)-1)(我发现连接函数因错误的行而出错

给出这个结果: Result of the functions listed above in answer

我已经尝试了一些没有成功的数组函数,这可能是解决这个问题的一种方法。