通过双向条件填充列表

即时兴趣实施的东西,但我不知道如果这是可能的,并希望你的摄入量。

这是我的场景:

我将有两个validation单元格将显示为列表,我将select。 这些是我的条件,我想见面,并从数据库中省略我的名单。

我有一个B13:B23的代理商列表,接下来的两个我有数据列,假设我的数据库看起来像这样

BCDE X | Y | Z agent1 1 | 1 | 0 agent2 0 | 1 | 0 agent3 0 | 1 | 1 agent4 1 | 0 | 0 

我想从列B中填充代理名称列表,当我从validation单元格1中select:X和validation单元格2:1.它应该只显示

 column: agent1 agent4 

或列X中的代理与0 …

我读了一些关于数组公式的地方,但我不知道这是否方便,我不幸的是没有任何macros的背景:(但我知道在C ++这样的事情是相当容易的条件语句。

提前致谢,

有可能的。 解决这个问题的一个方法是调用一个sub,当您的Worksheet_Change中的Target与validation单元格1或单元格2相交时,将会为您列出相关的代理程序。

然后,你将运行一个3参数srcRange,validationColumn和validationValue的subprocessthrogh srcRange的每一行,并检查位置rownumber,validationColumn上的单元格是否等于validationValue如果是这样,它输出代理并设置outputrow + 1

把这个VBA放在你的表中:

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim watchRange As Range Dim validationValue As Range Dim validationColumn As Integer Set watchRange = Me.Range("H1, I1") ' Validation Cells ' If Not Intersect(Target, watchRange) Is Nothing Then Set validationValue = Me.Range("I1") validationColumn = 0 With Me.Range("H1") If (.value = "X") Then validationColumn = 2 If (.value = "Y") Then validationColumn = 3 If (.value = "Z") Then validationColumn = 4 End With listAgents Me.Range("B3:E6"), validationColumn, validationValue End If End Sub Private Sub listAgents(ByRef srcRange As Range, ByVal validationColumn As Integer, ByRef validationValue As Range) Dim outputStart As Range Dim row As Range Dim i As Long Set outputStart = Me.Range("H3") outputStart.CurrentRegion.Clear If validationColumn = 0 Then MsgBox "Can't find Validation Column" Exit Sub End If i = 0 For Each row In srcRange.Rows If (row.Cells(1, validationColumn) = validationValue) Then outputStart(1 + i, 1) = row.Cells(1, 1) i = i + 1 End If Next row End Sub 

我testing了你的例子,它的工作。