Excel 通过bi条件填充列表
我有兴趣实施一些东西,但我不确定这是否可能,并希望你的摄入量 以下是我的设想: 我将有两个验证单元,它们将显示为我将从中选择的列表。 这些是我希望满足的条件,并从数据库中删除我的列表 我有一个B13:B23的代理列表,接下来的两个是数据列 假设我的数据库是这样的Excel 通过bi条件填充列表,excel,excel-formula,excel-2003,vba,Excel,Excel Formula,Excel 2003,Vba,我有兴趣实施一些东西,但我不确定这是否可能,并希望你的摄入量 以下是我的设想: 我将有两个验证单元,它们将显示为我将从中选择的列表。 这些是我希望满足的条件,并从数据库中删除我的列表 我有一个B13:B23的代理列表,接下来的两个是数据列 假设我的数据库是这样的 B C D E X | Y | Z agent1 1 | 1 | 0 agent2 0 | 1 | 0 agent3 0 | 1 | 1 agent4 1
B C D E
X | Y | Z
agent1 1 | 1 | 0
agent2 0 | 1 | 0
agent3 0 | 1 | 1
agent4 1 | 0 | 0
当我从validation cell1:X和validation cell2:1中进行选择时,我希望填充B列中的代理名称列表。
它应该只显示
column:
agent1
agent4
或列X中具有0的代理
我读过一些关于数组公式的文章,但我不知道这是否方便,我很遗憾没有背景知识(但是我知道C++中的类似条件语句是很容易的。
提前感谢,这是可能的。一种方法是,每当工作表中的目标更改与验证单元格1或单元格2相交时,调用一个sub,列出相关代理 然后,您将运行一个包含3个参数srcRange、validationColumn和validationValue的sub,该参数穿过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
我在您的示例中测试了它,它成功了。您是对的,这确实有效。而且效果很好。我检查了代码,并尝试使用listAgents Me.Range(“B3:E6”)从不同的表中提取数据,例如listAgents Me.Range(“sheet2!B3:E6”)这行得通吗,因为它在我这方面似乎不起作用。Me指的是代码所在的表。因此,您可以调用listAgents Sheet2.Range(“B3:E6”)| listAgents Sheets(“Sheet2”).Range(“B3:E6”)或listAgents Sheets(2.Range)(“B3:E6”)