我正在查看一个包含命名列的大型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。感谢所有的帮助,谢谢!
答案 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>)
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)
(我发现连接函数因错误的行而出错
给出这个结果:
我已经尝试了一些没有成功的数组函数,这可能是解决这个问题的一种方法。