excel中自定义函数Mlookup一对多匹配函数代码

Mlookup(查找内容tj,查找区域rgs,返回值所在的列数L,第M个,连接字符串,默认为“,”)

1、查找内容:除了单个值外,还可以选取多个单元格,进行多条件查找。
2、查找区域: 同VLOOKUP
3、返回值的在列数L: 同VLOOKUP
4、第M个:值为1就返回第1个符合条件的,值为2就返回第2个符合条件的…当值为-1值时,返回最后1个符合条件的值,值为0时返回所有查找结果并用逗号连接

Function Mlookup(tj As Range, rgs As Range, L As Integer, M As Integer, Optional str As String = ",") As String
    Dim arr1, ARR2, Ls
    Dim r, k, i As Integer, S As String, Sr As String
    arr1 = tj.Value
    ARR2 = rgs.Value
    If VBA.IsArray(arr1) Then
        For Each r In arr1
            If r <> "" Then
                S = S & r
                Ls = Ls + 1
            End If
        Next r
    Else
        S = arr1
    End If
    If M > 0 Then '非查找最后一个
        For i = 1 To UBound(ARR2)
            Sr = ""
            If Ls > 1 Then
                For q = 1 To Ls
                    Sr = Sr & ARR2(i, q)
                Next q
            Else
                Sr = ARR2(i, 1)
            End If
            If Sr = S Then
                k = k + 1
                If k = M Then
                    Mlookup = ARR2(i, L)
                    Exit Function
                End If
            End If
        Next i
    ElseIf M = 0 Then '查找所有值
        For i = 1 To UBound(ARR2)
            Sr = ""
            If Ls > 1 Then
                For q = 1 To Ls
                    Sr = Sr & ARR2(i, q)
                Next q
            Else
                Sr = ARR2(i, 1)
            End If
            If Sr = S Then
                Mlookup = Mlookup & str & ARR2(i, L)
            End If
        Next i
        Mlookup = Right(Mlookup, Len(Mlookup) - Len(str))
        Exit Function
    Else '查找最后一个
        For i = UBound(ARR2) To 1 Step -1
            Sr = ""
            If Ls > 1 Then
                For q = 1 To Ls
                    Sr = Sr & ARR2(i, q)
                Next q
            Else
                Sr = ARR2(i, 1)
            End If
            If Sr = S Then
                Mlookup = ARR2(i, L)
                Exit Function
            End If
        Next i
    End If
    Mlookup = ""
End Function

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值