【问题标题】:Excel Fill Infomation dependent on two dynamic dropdownsExcel 填充信息依赖于两个动态下拉列表
【发布时间】:2018-12-21 18:15:45
【问题描述】:

我正在尝试为以下问题寻找解决方案:
我有一个sheet,其中包含几个客户的信息,每个客户都有几个项目。客户+项目名称的组合是唯一的。

different sheet 上,我希望能够:

  1. 从没有重复的动态下拉列表中选择客户(我已经做到了)
  2. 然后显示第二个下拉列表,仅显示所选客户的那些项目
  3. 自动填充单元格 (C5:C7) 中的信息

由于数据表的内容是动态的并且将包含大量数据,因此无法选择命名表。

如果有人知道如何解决这个问题,我将不胜感激!

【问题讨论】:

  • 您使用 [VBA] 标记了您的帖子。那么,使用这种方法的解决方案怎么样:stackoverflow.com/questions/42879261/…?
  • 这对我第二个问题的第一部分似乎很有帮助,谢谢!但是,它并没有解决我的问题,如何(动态地)过滤与特定客户相关的项目。
  • 听起来您在某处需要动态命名范围。

标签: excel vba dynamic dropdown


【解决方案1】:

可以通过VBA实现。我已经编写了以下代码并为我工作。

输入表:

试试下面的代码。

Sub CustomerAndProject()

Dim Customer As String, Project As String, Info1 As String, Info2 As String, Info3 As String

Dim TotalCustomers As Integer, m As Integer

m = 1

'Get Total customers

TotalCustomers = Worksheets("Sheet1").Range("A1").End(xlDown).Row

'First loop to pick customers

For i = 2 To TotalCustomers

Customer = Worksheets("Sheet1").Range("A" & i).Value

'Second loop to pick the projects related to customer

For k = 2 To TotalCustomers

Project = Worksheets("Sheet1").Range("B" & k).Value

'Function r=to validate the duplicate customers and projects

If CustomerValidationForDuplication(Project, Customer, TotalCustomers) = False Then

'Third loop to pick and paste info data related to customer and project

For j = 2 To TotalCustomers

If Worksheets("Sheet1").Range("A" & j).Value = Customer And Worksheets("Sheet1").Range("B" & j).Value = Project Then

Worksheets("Sheet2").Cells(1, m).Value = Customer

Worksheets("Sheet2").Cells(2, m).Value = Project

        If IsEmpty(Worksheets("Sheet1").Range("C" & j).Value) Then

            Else: Info1 = Worksheets("Sheet1").Range("C" & j).Value

                Worksheets("Sheet2").Cells(3, m).Value = Info1

               End If

                If IsEmpty(Worksheets("Sheet1").Range("D" & j).Value) Then

                    Else: Info2 = Worksheets("Sheet1").Range("D" & j).Value

                    Worksheets("Sheet2").Cells(4, m).Value = Info2

                      End If

                        If IsEmpty(Worksheets("Sheet1").Range("E" & j).Value) Then

                            Else: Info3 = Worksheets("Sheet1").Range("E" & j).Value

                            Worksheets("Sheet2").Cells(5, m).Value = Info3

                             End If

                     End If

                 Next

             m = m + 1

        End If

    Next

Next


End Sub


Function CustomerValidationForDuplication(ProjectToBeVerified As String, CustomerToBeVerified As String, TotalCustomers As Integer) As Boolean

For l = 1 To TotalCustomers

If ProjectToBeVerified = Worksheets("Sheet2").Cells(2, l) Then

For m = 1 To TotalCustomers

If CustomerToBeVerified = Worksheets("Sheet2").Cells(1, m) Then

CustomerValidationForDuplication = True

Exit For


Else

CustomerValidationForDuplication = False

End If

Next

Else

CustomerValidationForDuplication = False

End If

If CustomerValidationForDuplication = True Then Exit For

Next


End Function

输出表:

让我知道它是否适合你。

注意:我是 VBA 新手,所以我的代码不友好。欢迎编辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多