Excel公式:抓取特定单元格对应的列名

Excel工作表

在上面的excel工作表我需要一个公式,将提取该特定的列名称,其中“1”存在,并在相应的单元格中input该名称。 示例 – 在上面的图像中,与“标记”列对应的每行都包含相应单元格包含“1”的列名称。

对于一个4列的例子,你可以使用这个:

=SUBSTITUTE(TRIM(IF(A2,$A$1,"")&" "&IF(B2,$B$1,"")&" "&IF(C2,$C$1,"")&" "&IF(D2,$D$1,""))," ",", ")

对于7列,只需在TRIM添加额外的IF语句,遵循相同的模式。

该公式依赖于1=TRUE来保持简短。 每个IF的结果后面跟着一个空格。 当没有1发生时, TRIM消除了剩余的空间。 最后, SUBSTITUTE转换 进入,所以你会得到一个逗号分隔列表。

注意:

TRIM从文本中剥离出额外的空格,在文本的开头或结尾处只留下单词之间的单个空格和空格字符。

在这里输入图像说明

找不到连接范围的非vba解决scheme。 所以这里是一个UDF

 Function conCatRange(ByVal criteriaRange As range, _ ByVal criteria As String, _ ByVal conRange As range, _ ByVal separator As String) As String Dim c As range conCatRange = "" For i = 1 To conRange.Columns.Count If (criteriaRange(1, i) = criteria) Then conCatRange = conCatRange & conRange(1, i) & separator End If Next i conCatRange = Left(conCatRange, Len(conCatRange) - 1) End Function 
  1. criteriaRange =你想检查1s的范围,
  2. 条件= 1(在你的情况)
  3. conRange =标题范围
  4. separator =“,”

如果要添加摘要和参数描述,请参阅此链接如何在用户定义的函数上放置工具提示

假设你的头域是AK,

你可以从L2开始使用这个公式:

= IF(MID(TRIM(IF(A2 = 1,A $ 1,“”)&IF(B2 = 1,“,”&B $ 1,“”)&IF(C2 = 1,“,”&C $ 1,“”)&IF (D2 = 1,“,”&D $ 1,“”)和IF(E2 = 1,“,”&E $ 1,“”)&IF(F2 = 1,“,”&F $ 1, “&”,&G $ 1,“”)&IF(H2 = 1,“,”&H $ 1,“”)&IF(I2 = 1,“,”&I $ 1,“”)&IF(J2 = 1,“,”&J $ 1如果(B2 = 1,A $ 1,“”)&IF(B2 = 1, 1“,”&“,B $ 1,”“和IF(C2 = 1,”,“&$ C $ 1,”“)&IF(D2 = 1,”,“&D $ 1,”“)&IF(E2 = 1, ,“&E $ 1”,“&IF(F2 = 1,”,“&F $ 1,”“)&IF(G2 = 1,”,“&G $ 1,”“)&IF(H2 = 1, “”)&IF(I2 = 1,“,”&I $ 1,“”)&IF(J2 = 1,“,”&J $ 1,“”)&IF(K2 = 1,“,”&K $ 1,“”)) 3,1000),TRIM(IF(A2 = 1,A $ 1,“”)&IF(B2 = 1,“,”&B $ 1,“”)&IF(C2 = 1,“,”&C $ 1,“”)&IF (D2 = 1,“,”&D $ 1,“”)和IF(E2 = 1,“,”&E $ 1,“”)&IF(F2 = 1,“,”&F $ 1, “&”,&G $ 1,“”)&IF(H2 = 1,“,”&H $ 1,“”)&IF(I2 = 1,“,”&I $ 1,“”)&IF(J2 = 1,“,”&J $ 1 ,“”)&IF(K2 = 1,“,”&K $ 1,“”)))

这个公式在中间函数列中有1000个字符的限制。 并重复3次相同的公式,因为分隔符:“,”但如果你不介意的结果格式,你可以将它缩短为一个。 只需填写1列,列名就会出现。

希望这可以帮助。