1

何かを実装することに興味がありますが、それが可能かどうかわからないので、それを取り入れてください。

これが私のシナリオです:

選択するリストとして表示される2つの検証セルがあります。これらは、データベースから自分のリストを満たし、除外したいという私の条件です。

B13:B23をスローするエージェントのリストがあり、次の2つには、データベースが次のようになっていると仮定して、データの列があります。

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

..。

検証セル1:Xおよび検証セル2:1から選択したときに、列Bからエージェント名のリストを入力したい。

column:
agent1
agent4

または列Xのエージェント(0 .. ..)

配列数式についてどこかで読んだのですが、これが便利かどうかわかりません。残念ながら、マクロの背景はありません:(しかし、C ++では、このようなものは条件文でかなり簡単です。

前もって感謝します、

4

1 に答える 1

2

可能です。これにアプローチする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

私はあなたの例でそれをテストしました、そしてそれは働きました。

于 2009-12-04T21:30:35.950 に答える