Excel中的条件连接
如图所示,有一些1和0被重新排列成3行,每列有一个英文字母。当相应的列值为0时,我需要做的是连接每行的英文字母。我怎么做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函数以获得结果 以下是我所做的: 使用该公式将得到如
如果您愿意,您可以在一个配方中完成这一切:
=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
。可选”
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)),""))