我对VBA很陌生并且努力跟随:我有一张大约1000行,每行代表一个客户记录。第一列是客户端ID号,接下来的10列是客户端使用的meds。我想找到哪些客户使用某种药物组合。所以,我有一个选择药物的表格,让我们说组合蛋白1给我Med1,combobox2给Med2等等,直到5种药物的组合。我知道如何找到有多少客户使用1个选定的med,但我不知道如何找到一个组合。所以,我想找到很多客户使用med1 + med2 + ... + med5的组合。 谁能帮我这个?非常感谢你!
答案 0 :(得分:0)
在现有列旁边添加一个新列,并将其命名为“valid”。
在列中,您可以使用if =if(AND(A:A=Med1,B:B=Med2,C:C=Med3),1,0)
这个例子基本上是查看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才能进行表格通信才能获得正确的输出。