答案1
答案2
您需要在 VBA 中创建一个用户定义函数 UDF,并将其用作 X 列中的函数。代码如下,在您的工作簿中创建一个新模块
Public Function concatcell(Lookupvalue As String, LookupRange As Range, RowNumber As Integer)
Dim i As Long
Dim J As Long
Dim Result As String
Result = ""
J = LookupRange.Columns.Count
For i = 1 To J
If LookupRange.Cells(RowNumber, i) = Lookupvalue Then
Result = Result & LookupRange.Cells(1, i) & ";"
End If
Next i
concatcell = Result
End Function
在 X2 中写入:
=concatcell(1,$B$1:$L2,ROW())
将其向下拖动
$B$1:$L2 是前两行,将其更改为数据引用,但保持 $ 不变以使范围自动更改(行 B 包含要返回的标签)1 是您要查找的值
Row() 是向下拖动时要自动更改的行号
记得将工作簿保存为启用宏(以便下次打开时可以正常工作)
答案3
您需要使用的公式非常简单,尽管很长。以下是公式(应将其输入N2
,然后向下拖动直到有数据的位置):
=IF(B2>0,$B$1&";","")&IF(C2>0,$C$1&";","")&IF(D2>0,$D$1&";","")&IF(E2>0,$E$1&";","")&IF(F2>0,$F$1&";","")&IF(G2>0,$G$1&";","")&IF(H2>0,$H$1&";","")&IF(I2>0,$I$1&";","")&IF(J2>0,$J$1&";","")&IF(K2>0,$K$1&";","")&IF(L2>0,$L$1&";","")&IF(M2>0,$M$1&";","")
(这与您的示例有点不同,因为我发现您错过了标题D
。)
它的作用很简单,对于每一列,它检查此行中的单元格是否具有大于零的值,如果为真,则用分号括起来列名,如果不是,则留空。
如果你想看的话,我在这里上传了一个带有公式的示例文档https://1drv.ms/x/s!Ao8EzDmtlA0JhibEB9Wnq4GkXapp