Excel中的条件连接

Excel中的条件连接,excel,vba,excel-formula,conditional,concatenation,Excel,Vba,Excel Formula,Conditional,Concatenation,如图所示,有一些1和0被重新排列成3行,每列有一个英文字母。当相应的列值为0时,我需要做的是连接每行的英文字母。我怎么做 如果您愿意,您可以在一个配方中完成这一切: =CONCATENATE(IF($A1=0,'A',''),IF($B1=0,'B',''), ...) 或者将中间字符串放在一个单独的行中,然后将它们连接起来(以避免手指的磨损)。您是要将其连接到更多的列,还是仅连接到您提到的列?只要列数相对较少(如图中所示),就可以连接IF函数以获得结果 以下是我所做的: 使用该公式将得到如

如图所示,有一些1和0被重新排列成3行,每列有一个英文字母。当相应的列值为0时,我需要做的是连接每行的英文字母。我怎么做


如果您愿意,您可以在一个配方中完成这一切:

=CONCATENATE(IF($A1=0,'A',''),IF($B1=0,'B',''), ...)

或者将中间字符串放在一个单独的行中,然后将它们连接起来(以避免手指的磨损)。

您是要将其连接到更多的列,还是仅连接到您提到的列?只要列数相对较少(如图中所示),就可以连接IF函数以获得结果

以下是我所做的:

使用该公式将得到如下结果:

假设你在我的工作表中也有这些值,只需粘贴公式
=IF(B3=1,”,B$1)&IF(C3=1,”,C$1)&IF(D3=1,”,D$1)&IF(E3=1,”,E$1)&IF(F3=1,”,F$1)&IF(G3=1,“,G$1)&IF(H3=1,”,H$1)&IF(I3=1,”,I$1)&IF(J3=1,“,J$1)
在B7中,然后拖动到B8和B9以获得其余结果


当然,如果要对更多的列执行此操作,最好使用VBA。

这里有一个VBA解决方案,可以处理任意数量的列(假设与每列关联的字母是标准列标签):


如果所述假设不成立,代码应该不会太难调整。

在这里,将此函数添加到模块中。 然后可以通过excel直接调用它。不错

Function conc(ref As Range, Optional Separator As String) As String
Dim Cell As Range
Dim Result As String

For Each Cell In ref
    If Cell.Value = 0 Then
    Result = Result & chr(64 + Cell.Column) & Separator
    End If
Next Cell
If Separator <> "" Then conc = Left(Result, Len(Result) - 1) Else: conc = Result
End Function
函数conc(ref作为范围,可选分隔符作为字符串)作为字符串
暗淡单元格作为范围
将结果变暗为字符串
对于ref中的每个单元格
如果Cell.Value=0,则
结果=结果和颜色(64+单元格.列)和分隔符
如果结束
下一个细胞
如果分隔符为“”,则conc=Left(结果,Len(结果)-1)否则:conc=Result
端函数
有条件地连接行(UDF) 论据
  • SourceRowRange
    :包含将显示的值的范围 写入
    CCROW
    A、B、C…
    需要
  • 标准行范围
    :将检查的范围
    标准值
    。必需的
  • CriteriaValue
    CriteriaRowRange
    中的单元格将显示的值 对照。默认值为
    0
    。可选
  • JoinString
    :将放在两个值之间的值 写入
    CCROW
    。默认值为“
    。可选
'将以下代码复制到标准模块,即在VBE中转到
Insert>module

代码 如果添加
JoinString

=CCROW(A$1:I$1,A3:I3,,",")   ' Result: A,D,G
=CCROW(A$1:I$1,A3:I3,0,",")  ' Result: A,D,G
=CCROW(A$1:I$1,A3:I3,0,", ") ' Result: A, D, G
如果更改标准值:

=CCROW(A$1:I$1,A3:I3,1) ' Result: BCEFHI
=CCROW(A$1:I$1,A4:I4,1) ' Result: ABDEGH
=CCROW(A$1:I$1,A5:I5,1) ' Result: ABCEFHI
备注
在复制公式时,锁定(
$
)SourceRowRange的行,使其保持不变。

以下数组公式将执行此操作(使用Ctrl+Shift+enter输入):


对于较旧的Excel版本,请使用传统函数
CONCATENATE()
CHAR()
代替这些函数。

哪个Excel版本?如果您是最新的,则可以使用TEXTJOIN()N.B.。与前面提到的一样,只能从Office 365开始使用
=CCROW(A$1:I$1,A3:I3) ' Result: ADG
=CCROW(A$1:I$1,A4:I4) ' Result: CFI
=CCROW(A$1:I$1,A5:I5) ' Result: DG
=CCROW(A$1:I$1,A3:I3,,",")   ' Result: A,D,G
=CCROW(A$1:I$1,A3:I3,0,",")  ' Result: A,D,G
=CCROW(A$1:I$1,A3:I3,0,", ") ' Result: A, D, G
=CCROW(A$1:I$1,A3:I3,1) ' Result: BCEFHI
=CCROW(A$1:I$1,A4:I4,1) ' Result: ABDEGH
=CCROW(A$1:I$1,A5:I5,1) ' Result: ABCEFHI
=CONCAT(IF($A1:$I1=0,UNICHAR(64+COLUMN($A1:$I1)),""))