Compilare la lista tramite un bi-Condizione
-
13-09-2019 - |
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,
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.