Domanda

Sono interessato a implementare qualcosa, ma non sono sicuro se sarebbe stato possibile e vorrebbe l'apporto su di esso.

ecco il mio scenario:

avrò due celle di validazione che verranno mostrati come elenco che mi scegliere. quelli sono la mia condizione che mi piacerebbe incontrare e ommit la mia lista da un database.

Ho una lista di agenti che vanno gettò B13: B23 e successiva loro due ho colonne di dati partendo dal presupposto che la mia base di dati simile a questo

 B     C      D     E
       X  |   Y  |  Z
agent1 1  |   1  |  0
agent2 0  |   1  |  0
agent3 0  |   1  |  1
agent4 1  |   0  |  0

...

voglio compilare un elenco di nome di agente da colonna B, quando seleziono dal cell1 convalida: X e convalida cell2: 1. Dovrebbe mostrare solo

column:
agent1
agent4

o agenti in colonna X con 0 ...

ho letto da qualche parte sulla formula di matrice, ma non so se questo è conveniente e io non purtroppo hanno alcun background in macro :( ma so che in C ++ qualcosa come questo è abbastanza facile con istruzioni condizionali.

grazie in anticipo,

È stato utile?

Soluzione

E 'possibile. Un modo per avvicinarsi a questo è quello di chiamare un sub che si sono elencati gli agenti interessati ogni volta che il target nella vostra Worksheet_Change interseca con cell1 convalida o cell2 -.> La convalida cambiato

Poi si dovrebbe eseguire una sub con 3 paramenters srcRange, validationColumn e validationValue che va throgh ciascuna fila di srcRange e controlla se la cella nella posizione rownumber, validationColumn è uguale a validationValue se così emette l'agente e insiemi outputrow + 1

Metti questa VBA nel foglio:

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

L'ho testato sul vostro esempio e ha funzionato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top