Excel 根据一系列选择条件填充组合框

Excel 根据一系列选择条件填充组合框,excel,combobox,excel-formula,vba,Excel,Combobox,Excel Formula,Vba,我有两张工作表,我们称之为工作表和工作表: 工作表中有两列我们感兴趣的内容——OrderCol C和Customer Col D。 Customer列包含一个组合框/下拉列表,其中包含大量客户的姓名。 订单列包含另一个组合框/下拉列表,其中包含有关此客户订单的详细信息,例如订单号、客户代码和订单描述。 顺便说一句,我知道这是一个糟糕的布局,这不是我的设计。例如: value in Customer Column (column D): "Google" value in Order Colu

我有两张工作表,我们称之为工作表和工作表:

工作表中有两列我们感兴趣的内容——OrderCol C和Customer Col D。 Customer列包含一个组合框/下拉列表,其中包含大量客户的姓名。 订单列包含另一个组合框/下拉列表,其中包含有关此客户订单的详细信息,例如订单号、客户代码和订单描述。 顺便说一句,我知道这是一个糟糕的布局,这不是我的设计。例如:

value in Customer Column (column D): "Google"  
value in Order Column (column C): "1234 - GOO - An order from google."
WorksheetZ包含我们感兴趣的两列,其中包含用于填充WorksheetA中组合框的值:

同样,订单列A包含相同的数据,但数据被拆分为行,而不是下拉列表,工作表中的订单下拉列表当前由该列中的所有行填充

还有一个客户栏,里面有客户的名字——谷歌、IBM等等

目前,工作表中的订单列是使用此数据验证=WorksheetZ$A:$A将选择目前超过300的所有订单

我需要能够仅显示工作表A上订单下拉列表中已在工作表A.Customer中选择的客户的订单

所以,请原谅我糟糕的SQL伪代码

WorksheetA.Order=从WorksheetZ.Order中选择*,其中WorksheetA.Customer=WorksheetZ.Customer


以下是我将如何处理它。我创建了一个工作簿,其中有两张表,一张叫做查找,另一张叫做验证。你必须调整这个以适应你的情况。创建以下内容

命名范围查找工作表中的整列:

公司静态公司列表 公司查找将公司链接到订单的列 订单查找包含订单列表的列 MatchOrder一个空白列,用于生成匹配订单的列表

验证工作表中的单元格验证:

对于公司-列表->=公司 对于订单-列表->=匹配订单

VBA代码隐藏

在VBA编辑器中,将此代码添加到验证工作表中

Private Sub Worksheet_Change(ByVal Target As Range)
    UpdateValidationList Target
End Sub
然后将此代码添加到新模块

Dim CompanyCol As Long
Dim OrderCol As Long
Dim MatchCol As Long
Dim WriteRow As Long
Dim RowCounter As Long
Dim LastRow As Long
Dim ws As Worksheet

Sub UpdateValidationList(rng As Range)
    Set ws = Sheets("Lookups")
    WriteRow = 1
    Range("MatchOrder").Clear
    CompanyCol = Range("CompanyLookup").Column
    OrderCol = Range("OrderLookup").Column
    MatchCol = Range("MatchOrder").Column
    LastRow = ws.Cells(100000, CompanyCol).End(xlUp).Row
    For RowCounter = 1 To LastRow
        If ws.Cells(RowCounter, CompanyCol) = rng.Value Then
            ws.Cells(WriteRow, MatchCol) = ws.Cells(RowCounter, OrderCol)
            WriteRow = WriteRow + 1
        End If
    Next RowCounter
End Sub
这将创建一个验证列表,其中仅包含范围MatchOrder中的匹配订单,您的验证将在该范围内查看。这对用户是不可见的。TODO:错误处理


顺便说一句,使用Access数据库处理这类任务要容易得多。考虑迁移这个功能

你能澄清吗?如果你在A3中选择谷歌,那么对于B3,你只想要谷歌订单的选项吗?您应该有一列用于查找公司名称和公司列表,但订单需要两列,一列用于订购公司,另一列用于订单编号/详细信息本身。您的数据是这样设置的吗?工作表包含每个订单和客户名称之间的链接。我用一些图片修改了我的原始帖子,我希望他们能更好地解释。我很快会尝试,并让您知道-感谢您的回答和努力!如果它对我有效,那么我将标记为正确,但这看起来很好: