我有一些数据表明是否已针对特定网站执行特定“服务”(例如鸟类调查),每项服务均为“是”或“否”。
E.G。
A栏包含网站名称,例如A,B,C,D和E,A1中的标题为“Site Name”,A2中则为“A”等。
B栏包含B1中的“鸟类调查”,B2-B6则包含“是”或“否”。
同样可以列出C,D和E栏中的其他服务,分别说“蝙蝠调查”,“LVI”和“土地注册处”。
在F中我想连接包含“是”的每一行的服务名称。例如。让我们说B2,C2,D2和E2的值是“是”,“是”,“否”和“是”,我希望F2包含鸟类调查,蝙蝠调查。
据我所知,excel中没有可以执行此操作的本机函数,因此我一直在尝试在VBA中创建用户定义的函数。我尝试了两种方法
一个基于将两个范围(列名和“是/否”的行)输入UDF,然后将这些组合成一个数组以应用某种查找标准
和另一个返回列字母,从一个是/否范围,然后根据列字母从列名称中选择。
我以前无法上班。请注意,最后我需要创建一个适用于不同数量服务的UDF,它们不会像本例中那样预先定义。
有什么建议吗?
非常感谢提前。
答案 0 :(得分:7)
基于您正在寻找的东西,我很久以前就找到了这个功能,它的功能很有魅力:
Function ConcatenateIf(CriteriaRange As Range, Condition As Variant, _
ConcatenateRange As Range, Optional Separator As String = ",") As Variant
Dim i As Long
Dim strResult As String
On Error GoTo ErrHandler
If CriteriaRange.Count <> ConcatenateRange.Count Then
ConcatenateIf = CVErr(xlErrRef)
Exit Function
End If
For i = 1 To CriteriaRange.Count
If CriteriaRange.Cells(i).Value = Condition Then
strResult = strResult & Separator & ConcatenateRange.Cells(i).Value
End If
Next i
If strResult <> "" Then
strResult = Mid(strResult, Len(Separator) + 1)
End If
ConcatenateIf = strResult
Exit Function
ErrHandler:
ConcatenateIf = CVErr(xlErrValue)
End Function
鉴于你的问题,它将按如下方式使用:
=ConcatenateIf(B2:E2,"yes",$B$1:$E$1,", ")
初始赠送金额为this link。
希望这可以解决问题!!