vba*_*hon 2 excel vba function
我有一些数据表明是否为特定网站执行了特定的"服务"(例如鸟类调查),每项服务都有"是"或"否".
例如
A列包含站点名称,例如A,B,C,D和E,A1中标题为"站点名称",A2中为"A"等.
B栏包含B1中的"鸟类调查",然后是B2-B6的"是"或"否".
对于C,D和E栏中的其他服务,同样可以分别说"蝙蝠调查","LVI"和"土地登记处".
在FI中,想要连接包含"是"的每一行的服务名称.EG可以说B2,C2,D2和E2的值是"是","是","否"和"是",我希望F2包含鸟类调查,蝙蝠调查.
据我所知,excel中没有可以执行此操作的本机函数,因此我一直在尝试在VBA中创建用户定义的函数.我尝试了两种方法
一个基于将两个范围(列名和"是/否"的行)提供给UDF,然后将它们组合成一个数组以应用某种查找标准
并且从一个是/否范围返回另一个返回列字母,然后根据列字母从列名称中选择.
虽然我还没能上班.请注意,最后我需要创建一个适用于不同数量服务的UDF,它们不会像本例中那样预先定义.
有什么建议?
提前谢谢了.
基于你正在寻找的东西,我很久以前发现了这个功能,并且它有一个魅力:
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
Run Code Online (Sandbox Code Playgroud)
鉴于您的问题,它将使用如下:
=ConcatenateIf(B2:E2,"yes",$B$1:$E$1,", ")
Run Code Online (Sandbox Code Playgroud)
最初的功劳归于此链接.
希望这样做!
| 归档时间: |
|
| 查看次数: |
13655 次 |
| 最近记录: |