Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 通过bi条件填充列表_Excel_Excel Formula_Excel 2003_Vba - Fatal编程技术网

Excel 通过bi条件填充列表

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

我有兴趣实施一些东西,但我不确定这是否可能,并希望你的摄入量

以下是我的设想:

我将有两个验证单元,它们将显示为我将从中选择的列表。 这些是我希望满足的条件,并从数据库中删除我的列表

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

 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”)