【问题标题】:VBA User Defined Function for "Concatenate If" by rows按行“连接如果”的VBA用户定义函数
【发布时间】:2014-03-25 15:57:04
【问题描述】:

我有一些关于是否已为特定网站执行特定“服务”(例如鸟类调查)的数据,每项服务都有“是”或“否”。

例如

  • A 列包含站点名称,例如 A、B、C、D 和 E,A1 中的标题为“站点名称”,A2 中的标题为“A”等。

  • B 列在 B1 中包含“鸟类调查”,然后在 B2-B6 中包含“是”或“否”。

  • C、D 和 E 列中的其他服务同上,分别说“Bat Survey”、“LVI”和“Land Registry”。

  • 在 F 中,我想为包含“是”的每一行连接服务名称。例如。假设 B2、C2、D2 和 E2 的值为“是”、“是”、“否”和“是”,我希望 F2 包含鸟类调查、蝙蝠调查。

据我了解,excel 中没有可以执行此操作的本机函数,因此我一直在尝试在 VBA 中创建用户定义的函数。我尝试了两种方法

  • 一个基于将两个范围(列名和“是/否”行)输入 UDF,然后将它们组合成一个数组以应用某种查找条件的方法

  • 和另一个从是/否范围返回的列字母,然后根据列字母从列名称中进行选择。

不过,我无法让其中任何一个工作。请注意,最后我需要创建一个适用于不同数量服务的 UDF,它们不会像本例中那样预先定义。

有什么建议吗?

非常感谢。

【问题讨论】:

  • 有助于将您尝试的代码添加到您的问题中 - 即使它不太有效。
  • 几个问题... (1) 给定您的示例“ 例如,假设 B2、C2、D2 和 E2 的值是“是”、“是”、“否”和“是” ,我希望 F2 包含鸟类调查、蝙蝠调查。” - 应该说“鸟类调查、蝙蝠调查、土地登记”吗? (2)你是仅限于“是”/“否”还是可以是(1 / 0)或(True / False)?
  • 哎呀,对不起,是的,你说得对,它确实应该说“鸟类调查,蝙蝠调查,土地登记处”。也可以按照您的建议将其更改为不同的二进制条件,(1/0) 或 (True/False)。
  • 现在发布解决方案....

标签: excel function vba


【解决方案1】:

根据您正在寻找的内容,我很久以前就发现了这个功能,它很有魅力:

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

希望这能解决问题!

【讨论】:

  • 不错的答案,恭喜你 5k :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多