如果下面的列有1,则连接顶行单元格
我正在查看名为列的1和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),“”)
和一些事情接近,但我没有find一个明显的方式来得到它。 我也没有时间或足够的知识来处理VBA。 感谢所有帮助,谢谢!
甚至在没有设置标准的情况下,多于几个单元格的string连接最好留给VBA 用户定义的函数 (aka UDF )。 你们“嵌套一百个”中频“function”的情况一定会把它放在这个范畴。
点击Alt + F11 ,当VBE打开时,立即使用下拉菜单插入►模块( Alt + I , M )。 将以下内容粘贴到标题为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>)
G2中的公式是,
=conditional_concat(A$1:E$1, A2:E2)
根据需要填写。
我会这样做的方法是添加五个额外的列,并明确地input“红色”,“蓝色”,“绿色”,“橙色”,“紫色”,其中相应的列是1,所以你可以这样做:
红色列'r': =IF(col_red=1,"red,","")
蓝色列'b': =IF(col_blue=1,"blue,","")
绿色列'g': =IF(col_green=1,"green,","")
橙色列'o': =IF(col_orange=1,"orange,","")
紫色列'p': =IF(col_purple=1,"purple,","")
=LEFT(F2 & G2 & H2 & I2 & J2,LEN(F2 & G2 & H2 & I2 & J2)-1)
(我find了连接string函数由于错误的行而出错
给出这个结果:
我已经尝试了一些没有成功的数组函数,这可能是解决这个问题的一种方法。