可能です。これにアプローチする1つの方法は、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
私はあなたの例でそれをテストしました、そしてそれは働きました。