V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ZakaryTime
V2EX  ›  问与答

求组 VBA 高手, VBA 编程实现多条件多返回值查找(可有偿)

  •  
  •   ZakaryTime · 2020-12-03 20:50:54 +08:00 · 1488 次点击
    这是一个创建于 1450 天前的主题,其中的信息可能已经有所发展或是发生改变。

    函数功能:制作一个可以在 WPS 和 Excel VBA 通用自定义函数(自加载宏加载可以直接用函数名作为公式名调用),实现多条件查找返回符合条件的一个或者多个返回值,利用指定的分隔符连接,默认分隔符为;

    函数原型:符合条件的数据 mylookup(查找的单元格,查找条件 1条件 2.....*条件 n,返回的区域,指定的连接符(可以不指定使用默认;))

    6 条回复    2020-12-04 22:18:33 +08:00
    zhyt0520
        1
    zhyt0520  
       2020-12-03 22:08:51 +08:00
    greatbody
        2
    greatbody  
       2020-12-03 23:44:17 +08:00
    老 VB6 用户路过
    Tumblr
        3
    Tumblr  
       2020-12-04 00:32:02 +08:00
    多条件查找,一般来说直接 vlookup 或 xlookup 就可以了,用不到 vba 。
    ZakaryTime
        4
    ZakaryTime  
    OP
       2020-12-04 22:17:06 +08:00
    @zhyt0520 谢谢,解决了。
    ZakaryTime
        5
    ZakaryTime  
    OP
       2020-12-04 22:17:22 +08:00
    @Tumblr 匹配值不是唯一的时候很麻烦。
    ZakaryTime
        6
    ZakaryTime  
    OP
       2020-12-04 22:18:33 +08:00   ❤️ 1
    已经解决了,代码共享出来给以后有用的人

    Function myLookUp(arr, RngData As Range, Optional splitFlag$ = ";")
    Dim arrData
    Dim r&, i&
    Dim xrr(), x&
    If Not IsArray(arr) Then
    myLookUp = CVErr(xlErrValue)
    Else
    arrData = RngData.Resize(UBound(arr), 1)
    For r = 1 To UBound(arr)
    If arr(r, 1) Then
    x = x + 1
    ReDim Preserve xrr(1 To x)
    xrr(x) = arrData(r, 1)
    End If
    Next
    If x > 0 Then
    myLookUp = Join(xrr, splitFlag)
    Else
    myLookUp = CVErr(xlErrValue)
    End If
    End If
    End Function


    完整的说明:
    [VBA Excel 多条件 多返回值]( https://www.yuque.com/zakary/qrnvpn/frpg6s)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2959 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:10 · PVG 08:10 · LAX 16:10 · JFK 19:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.