Заполнить список с помощью двух условий - PullRequest
1 голос
/ 05 декабря 2009

Я заинтересован в реализации чего-либо, но я не уверен, что это будет возможно, и хотел бы, чтобы ваше потребление было на нем.

вот мой сценарий:

У меня будет две ячейки проверки, которые будут показаны в виде Списка, из которого я буду выбирать. это мое условие, которое я хотел бы встретить и опустить мой список из базы данных.

У меня есть список агентов, которые бросили 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

...

Я хочу заполнить список имен агентов из столбца B, когда я выбираю из ячейки проверки 1: Х и ячейки проверки 2: 1. он должен показывать только

column:
agent1
agent4

или агенты в столбце X с 0 ...

Я где-то читал о формуле массива, но не знаю, удобно ли это, и, к сожалению, у меня нет опыта работы с макросами :( но я знаю, что в C ++ что-то вроде этого довольно легко с условными операторами.

заранее спасибо,

1 Ответ

2 голосов
/ 05 декабря 2009

Это возможно. Одним из способов решения этой проблемы является вызов подпрограммы, в которой перечислены соответствующие агенты всякий раз, когда цель в вашем Worksheet_Change пересекается с проверкой cell1 или cell2 -> проверка изменилась.

Затем вы должны запустить подпрограмму с 3 параметрами srcRange, validationColumn и validationValue, которая проходит по каждой строке 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

Я проверил это на вашем примере, и это сработало.

...