如何创build一个列出包含“是”的字段标题的字段?

我有一个excel格式如下的表格:

╔════════╦════════╦════════╦════════╦═════════╗ ║ Field1 ║ Field2 ║ Field3 ║ ... ║ Field10 ║ ╠════════╬════════╬════════╬════════╬═════════╣ ║ no ║ no ║ no ║ ... ║ no ║ ║ no ║ yes ║ no ║ ... ║ no ║ ║ yes ║ yes ║ yes ║ ... ║ yes ║ ║ yes ║ yes ║ no ║ ... ║ yes ║ ║ . ║ . ║ . ║ ... ║ . ║ ║ . ║ . ║ . ║ ... ║ . ║ ║ . ║ . ║ . ║ ... ║ . ║ ╚════════╩════════╩════════╩════════╩═════════╝ 

正如你所看到的,每个领域可以有“是”和“否”的任意组合

我正尝试创build一个基于之前显示的数据格式的单个字段。 该字段将包含包含“是”的字段的名称。 如果多个字段中存在“是”,则应列出用逗号分隔的字段。

这是一个什么样的期望字段可能看起来像一个例子:

 ╔════════╦════════╦════════╦════════╦═════════╦══════════════════════════╗ ║ Field1 ║ Field2 ║ Field3 ║ ... ║ Field10 ║ NewField ║ ╠════════╬════════╬════════╬════════╬═════════╬══════════════════════════╣ ║ no ║ no ║ no ║ ... ║ no ║ ║ ║ no ║ yes ║ no ║ ... ║ no ║ Field2 ║ ║ yes ║ yes ║ yes ║ ... ║ yes ║ Field1, ..., Field10 ║ ║ yes ║ yes ║ no ║ ... ║ yes ║ Field1, Field2, Field10 ║ ║ . ║ . ║ . ║ ... ║ . ║ ... ║ ║ . ║ . ║ . ║ ... ║ . ║ ... ║ ║ . ║ . ║ . ║ ... ║ . ║ ... ║ ╚════════╩════════╩════════╩════════╩═════════╩══════════════════════════╝ 

我试图用excel公式来达到这个目标,但到目前为止,唯一能解决的办法就是把excel公式中的每一个可能的组合都包括在内。 当然,这是创build和改变效率低下和耗时的。 有什么办法可以有效地达到这个效果吗?

如果你没有Office 365 Excel,那么这里是一个自定义UDF来做你想做的事情:

 Function JoinField(ttl As Range, srchrng As Range, crit As Variant, Optional sep As String = ",") As String Dim ttlArr() As Variant Dim srchrngArr() As Variant Dim i&,j& ttlArr = ttl.Value srchrngArr = srchrng.Value If UBound(ttlArr, 1) <> UBound(srchrngArr, 1) Or UBound(ttlArr, 2) <> UBound(srchrngArr, 2) Then Exit Function For i = LBound(ttlArr, 1) To UBound(ttlArr, 1) For j = LBound(ttlArr, 2) To UBound(ttlArr, 2) If srchrngArr(i, j) = crit Then JoinField = JoinField & ttlArr(i, j) & sep End If Next j Next i JoinField = Left(JoinField, Len(JoinField) - Len(sep)) End Function 

把它放在连接到工作簿的模块中。 不要把它放在工作表代码或ThisWorkbook代码中。

然后它被称为一个正常的function:

 =JoinField($A$1:$J$1,$A2:$J2,"Yes",",") 

第一个标准是连接的名字。 第二个是具有标准的范围。 第三是标准find。 第四个是可选的分隔字符。 默认是,

在这里输入图像说明


如果您有最新的Office 365 Excel,则可以将此公式用作数组。

 =TEXTJOIN(",",TRUE,IF($A2:$J2 = "Yes", $A$1:$J$1,"")) 

作为一个数组,当退出编辑模式而不是Enter时,需要使用Ctrl-Shift-Enter进行确认。 如果做得正确,Excel将在公式周围放置{}

为了certificateFORMULA使用多个IF公式是多么乏味和冗长,你可以用一个公式如下所示:

 =IF(LEFT(IF(A2="yes",A$1,"")&IF(B2="yes",", "&B$1,"")&IF(C2="yes",", "&C$1,"")&IF(D2="yes",", "&D$1,"")&IF(E2="yes",", "&E$1,"")&IF(F2="yes",", "&F$1,"")&IF(G2="yes",", "&G$1,"")&IF(H2="yes",", "&H$1,"")&IF(I2="yes",", "&I$1,"")&IF(J2="yes",", "&J$1,""),1)=",",SUBSTITUTE(IF(A2="yes",A$1,"")&IF(B2="yes",", "&B$1,"")&IF(C2="yes",", "&C$1,"")&IF(D2="yes",", "&D$1,"")&IF(E2="yes",", "&E$1,"")&IF(F2="yes",", "&F$1,"")&IF(G2="yes",", "&G$1,"")&IF(H2="yes",", "&H$1,"")&IF(I2="yes",", "&I$1,"")&IF(J2="yes",", "&J$1,""),", ","",1),IF(A2="yes",A$1,"")&IF(B2="yes",", "&B$1,"")&IF(C2="yes",", "&C$1,"")&IF(D2="yes",", "&D$1,"")&IF(E2="yes",", "&E$1,"")&IF(F2="yes",", "&F$1,"")&IF(G2="yes",", "&G$1,"")&IF(H2="yes",", "&H$1,"")&IF(I2="yes",", "&I$1,"")&IF(J2="yes",", "&J$1,"")) 

上面的公式假定第1行作为字段标题,第一个字段起始列A.上面的公式将被放置在K2中并被复制下来。

现在,如果由于某种原因,你不能使用VBA或以.XLSM格式保存你的工作表,那么你需要上面那个可怕的公式。

除了滚动条,公式看起来更像是:

 =IF(LEFT(IF(A2="yes",A$1,"")&IF(B2="yes",", "&B$1,"")&IF(C2="yes",", "&C$1,"")& IF(D2="yes",", "&D$1,"")&IF(E2="yes",", "&E$1,"")&IF(F2="yes",", "&F$1,"")& IF(G2="yes",", "&G$1,"")&IF(H2="yes",", "&H$1,"")&IF(I2="yes",", "&I$1,"")& IF(J2="yes",", "&J$1,""),1)=",", SUBSTITUTE(IF(A2="yes",A$1,"")&IF(B2="yes",", "&B$1,"")&IF(C2="yes",", "&C$1,"")& IF(D2="yes",", "&D$1,"")&IF(E2="yes",", "&E$1,"")&IF(F2="yes",", "&F$1,"")& IF(G2="yes",", "&G$1,"")&IF(H2="yes",", "&H$1,"")&IF(I2="yes",", "&I$1,"")& IF(J2="yes",", "&J$1,""),", ","",1), IF(A2="yes",A$1,"")&IF(B2="yes",", "&B$1,"")&IF(C2="yes",", "&C$1,"")& IF(D2="yes",", "&D$1,"")&IF(E2="yes",", "&E$1,"")&IF(F2="yes",", "&F$1,"")& IF(G2="yes",", "&G$1,"")&IF(H2="yes",", "&H$1,"")&IF(I2="yes",", "&I$1,"")& IF(J2="yes",", "&J$1,"")) 

工作中的丑陋certificate

POC

一个主要的缺点是,如果你需要添加另一个领域的公式编辑将是一个皇家的痛苦在屁股!

如果只有10列你可以去… 喜欢这个

= IF(A2 = 1; INDIRECT(“A1”; TRUE);“”)&“,”&IF(B2 = 1; INDIRECT(“B1”; TRUE);“”)&“,”&… 。

在这个例子中,刚添加的0,1的值不是yes / no。