检查值的组合是否与范围中的值匹配

时间:2014-05-28 09:40:30

标签: arrays excel vba match

我对VBA很陌生并且努力跟随:我有一张大约1000行,每行代表一个客户记录。第一列是客户端ID号,接下来的10列是客户端使用的meds。我想找到哪些客户使用某种药物组合。所以,我有一个选择药物的表格,让我们说组合蛋白1给我Med1,combobox2给Med2等等,直到5种药物的组合。我知道如何找到有多少客户使用1个选定的med,但我不知道如何找到一个组合。所以,我想找到很多客户使用med1 + med2 + ... + med5的组合。 谁能帮我这个?非常感谢你!

2 个答案:

答案 0 :(得分:0)

在现有列旁边添加一个新列,并将其命名为“valid”。

在列中

,您可以使用if =if(AND(A:A=Med1,B:B=Med2,C:C=Med3),1,0)

之类的if公式

这个例子基本上是查看A列(对于您输入公式的同一行),检查它是否与Med1相同,然后查看B列,检查它是否与Med2相同等。它满足所有条件,它将返回1,如果不是,则返回0.然后您可以使用该列并在底部执行求和以查看有多少客户端实现该组合并可以过滤以确切了解它们是谁

对于所有10个列,您必须在AND之后继续执行这些操作。我的示例中的Med1,Med2等将链接到链接到组合框的任何输出。当您在组合框中更改选择时,它将在公式中查找并动态更改自己。

答案 1 :(得分:0)

嗯,你去了,虽然我不得不做一些假设:

Sub defineClients()

Dim chosenMeds(1 To 5)      As String
Dim ClientRange             As Range
Dim selectedClients         As Collection
Dim valid                   As Integer

Set selectedClients = New Collection
Set ClientRange = Range("A2:F1000") 'A = ClientID, B,C,D,E,F are Meds 1-5

For i = 1 To 1000 'Your number of clients

valid = 0

'Assume you can work this out from the ComboBox
chosenMeds(1) = "Med1"
chosenMeds(2) = "Med2"
chosenMeds(3) = "Med3"
chosenMeds(4) = "Med4"
chosenMeds(5) = "Med5"

    For j = 1 To 5 'Assuming every client has a list of 5 meds with no repeating(!!!)

        With ClientRange

            If _
        .Cells(i, 1 + j).Value = chosenMeds(1) Or _
        .Cells(i, 1 + j).Value = chosenMeds(2) Or _
        .Cells(i, 1 + j).Value = chosenMeds(3) Or _
        .Cells(i, 1 + j).Value = chosenMeds(4) Or _
        .Cells(i, 1 + j).Value = chosenMeds(5) _
        Then

            valid = valid + 1

        End If

    End With

Next j

If valid = 5 Then 'The client is valid

    selectedClients.Add ClientRange.Cells(i, 1).Value 'This collects the valid clients' ids

End If

Next i


End Sub

希望这会有所帮助,但对于它来说,你必须熟悉w / VBA才能进行表格通信才能获得正确的输出。