gpt4 book ai didi

excel - "Concatenate If"按行的 VBA 用户定义函数

转载 作者:行者123 更新时间:2023-12-03 00:12:35 28 4
gpt4 key购买 nike

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

E.G.

  • A 列包含网站名称,例如 A、B、C、D 和 E,A1 中标题为“网站名称”,A2 中标题为“A”,依此类推。

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

  • C、D 和 E 列中的其他服务也是如此,分别为“ bat 调查”、“LVI”和“土地登记”。

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

据我了解,Excel 中没有可以执行此操作的 native 函数,因此我一直在尝试在 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

鉴于您的问题,它将按如下方式使用:

=ConcatenateIf(B2:E2,"yes",$B$1:$E$1,", ")

初始信用归 this link .

希望这能成功!!

关于excel - "Concatenate If"按行的 VBA 用户定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22639868/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com