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
- criteriaRange =你想检查1s的范围,
- 条件= 1(在你的情况)
- conRange =标题范围
- 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列,列名就会出现。
希望这可以帮助。