excel - 在第二张纸上查找并突出显示一张纸上的文字

时间:2014-06-16 21:45:04

标签: excel vba excel-vba

我被excel杀死了,我不能100%确定它能完全满足我的需要。我尝试了各种各样的功能,可以接近,但没有一个是完美的。我以电子表格uploaded为例。我有一张邮箱,后面是一个单元格,其中包含有权访问邮箱的用户。单元格中有0到5个用逗号分隔的用户。第二张表有一个用户列表。我需要的是一种解析第一张纸的方法,要么在第一张纸上突出显示,要么复制到另一张纸上;所有关联用户在第二个单元格中匹配的所有邮箱都显示在第二个工作表上。

我拥有的真实世界表有超过2500个邮箱,其中有多达205个(少至0个)相关用户,因此我迫切需要一种机械过滤工作表的方法。我试图过滤所有关联用户在第二张纸上的邮箱。

我尝试过使用vlookup,索引/匹配以及其他一些内容,而且似乎将其绊倒的是使用逗号分隔。使用" "& cell_i' m_looking_for&" "没有回报,所以我猜我需要尝试别的东西。我还有单独单元格中所有用户的工作表。

1 个答案:

答案 0 :(得分:0)

我下载了你的工作表并创建了一个模块,其中包含以下功能:

Function mymailboxes(who As Range, lookup As Range)

Dim myRow As Range

For Each myRow In lookup

    If InStr(myRow.Cells(1, 2).Value, who.Value) > 0 Then

        myReturn = myReturn & "," & myRow.Cells(1, 1).Value

    End If

Next

'cut off the first ,

myReturn = Right(myReturn, Len(myReturn) - 1)

mymailboxes = myReturn

End Function

然后在表2中,Cell E2我给出了以下公式:=mymailboxes(A2, Sheet1!A1:B50),它给了我以下结果:mailbox1,mailbox2,mailbox4,mailbox8,mailbox12,mailbox17,mailbox21,mailbox25,mailbox28,mailbox34,mailbox39,mailbox41,mailbox42,mailbox44,mailbox49,mailbox50

我希望这会有所帮助。

要获取无效用户列表,以下功能将有所帮助。

Function get_invalid_users(users As Range, validusers As Range)

Dim myRow As Range

myusers = Split(users, ",")
myReturn = ""

For Each user In myusers

    is_valid_user = False
    'Guilty until proven innocent

    For Each myRow In validusers

        If myRow.Cells(1, 1).Value = user Then

            is_valid_user = True
            'Proven innocent, break out of the loop, no double jeopardy.
            Exit For

        End If

    Next

    If is_valid_user = False Then

        myReturn = myReturn & "," & user

    End If

Next

If Len(myReturn) > 0 Then

    myReturn = Right(myReturn, Len(myReturn) - 1)

Else

    myReturn = ""

End If

get_invalid_users = myReturn

End Function

表单1,公式为=get_invalid_users(B2, Sheet2!$A$1:$A$3)的单元格C2返回zx1234