【发布时间】:2023-04-08 22:14:01
【问题描述】:
在上面的 excel 表中,我需要一个公式来提取存在“1”的特定列名,并在相应的单元格中输入该名称。示例-在上面的图像中,对应于 col“Tags”的每一行都包含相应单元格包含“1”的列名。
【问题讨论】:
标签: excel excel-formula
在上面的 excel 表中,我需要一个公式来提取存在“1”的特定列名,并在相应的单元格中输入该名称。示例-在上面的图像中,对应于 col“Tags”的每一行都包含相应单元格包含“1”的列名。
【问题讨论】:
标签: excel excel-formula
对于一个 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 解决方案。所以这是一个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
如果您想添加摘要和参数说明,请参阅此链接 How to put a tooltip on a user-defined function
【讨论】:
假设您的标题范围是 A-K,
你能不能从 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,"")&IF(G2 =1,", "&G$1,"")&IF(H2=1,", "&H$1,"")&IF(I2=1,", "&I$1,"")&IF(J2=1,", "&J$1,"")&IF(K2=1,", "&K$1,"")),1,2)=", ",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,"")&IF(G2=1,", "&G$1,"")&IF(H2=1,", " &H$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,"")&IF(G2 =1,", "&G$1,"")&IF(H2=1,", "&H$1,"")&IF(I2=1,", "&I$1,"")&IF(J2=1,", "&J$1,"")&IF(K2=1,", "&K$1,"")))
这个公式在 mid 函数的列中限制为 1000 个字符。由于分隔符,它重复了 3 次相同的公式:“,”但如果您不介意结果格式,您可以将其缩短为 1。只需在列中填入put 1,就会出现列名。
希望这会有所帮助。
【讨论】: