在Excel工作表中搜索,并根据带有层次结构的where子句返回一个值?

时间:2018-11-07 09:26:15

标签: excel vba

我正试图根据客户使用的产品归还潜在销售人员

我有一个工作簿,其中包含许多工作表。第一个工作表是一个摘要工作表,带有一个搜索字段和一个按钮,单击该按钮可从其他工作表返回特定的列数据。 其他工作表基于产品,我们有三个产品,等于三个工作表。每个工作表中的列都是相同的,不同产品的数据也不同。

已要求我在每个产品工作表中添加一个新列“销售人员”,目的是在执行新搜索时将数据拉到摘要工作表中。 我面临的问题是,当客户使用多种产品时,会有一位主要销售人员。尽管每种产品都有一个销售人员,但每种产品却有不同的人员,并且客户使用多个产品时,其中一名销售人员承担主要销售人员的角色

工作簿结构为 工作表1是摘要表,并将有一个新的列标题,称为“潜在销售人员” 工作表2用于Windows,销售人员是Jack 工作表3用于门,销售人员是Mary 工作表4用于瓷砖,销售人员是莎拉

返回正确的潜在销售人员的场景

1-客户产品清单=门窗 然后应找回的销售人员是杰克

2-客户产品清单=瓷砖和窗户 然后应找回的销售人员是莎拉

3-客户产品清单=窗户,门和瓷砖 然后应该找回的销售人员是莎拉

4-WHERE客户产品列表=单个产品 然后,检索到的销售人员的姓名应该是该工作表上“销售人员”列中的人员姓名

注意:每个工作表之间的通用链接是“客户ID”字段。这就是我们执行以下查询时可以查看客户拥有的所有产品的原因。

理想情况下,我需要的是灵活的东西,这样就无需将人的名字硬编码到代码中来检索潜在销售人员

下面是我为在当前工作表中搜索而编写的代码。它的工作原理很棒,只需要找到一种添加以上内容的方法即可! 预先感谢。

Option Compare Text

Sub OptionCompareText()


End Sub

Sub SearchMultipleSheets()

    'The 5 in the line below is the maximum array value which further down is the arr(i, 5) = ws.Name entry
    Dim arr(999, 5) As Variant, r As Range
    Dim ws As Worksheet, i As Integer, s As String
    Dim lastrow As Long
    lastrow = Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row

    Set r = Sheets ("Sheet2").Range("A2:A & Lastrow)

    With Sheets(1)
        s = Range("c1").Value
        .Range("a3").Resize(.UsedRange.Rows.Count, .UsedRange.Columns.Count).ClearContents
    End With
    For Each ws In Worksheets
        If ws.Name <> Sheets(1).Name Then
        With ws
            For Each r In .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
                If r.Value & r.Offset(0, 1).Value & r.Offset(0, 2).Value & r.Offset(0, 3).Value Like "*" & s & "*" Then
                    arr(i, 0) = ws.Name
                    'arr(i, 1) = r.Value
                    arr(i, 1) = r.Offset(0, 1).Value
                    arr(i, 2) = r.Offset(0, 2).Value
                    arr(i, 3) = r.Offset(0, 3).Value
                    arr(i, 4) = r.Offset(0, 4).Value

                    i = i + 1
                End If
            Next r
        End With
        End If
    Next ws
    With Sheets(1)
        .Range("a3").Resize(i, 6).Value = arr
    End With
End Sub

0 个答案:

没有答案