Vba 基于条件提取excel行
嗨,我有一个Excel表格a列在下面Vba 基于条件提取excel行,vba,excel,excel-formula,Vba,Excel,Excel Formula,嗨,我有一个Excel表格a列在下面 RowNo ID CancelledBy 1 12345 Provider 2 12345 Provider 3 12345 Patient 4 12345 Patient 5 12345 Patient 6 12345 Provider 7 12345 Patient 8 12345 Provider 9
RowNo ID CancelledBy
1 12345 Provider
2 12345 Provider
3 12345 Patient
4 12345 Patient
5 12345 Patient
6 12345 Provider
7 12345 Patient
8 12345 Provider
9 54321 Patient
10 54321 Provider
11 54321 Provider
12 54321 Patient
13 54321 Provider
从上表中,我想选择那些行,如果一行包含“provider”,下一行包含“Patient”,那么我想为该患者提取两行。
基本上是“提供者”行,后面是“患者”行,如下所示
RowNo ID CancelledBy
2 12345 Provider
3 12345 Patient
6 12345 Provider
7 12345 Patient
11 54321 Provider
12 54321 Patient
是否有excel公式/vbscript或宏可以执行此操作。我试了一整天,但没有乐趣
谢谢编辑以下内容可能会有所帮助。数据应该在“MyData”表中(带有命令按钮),结果写在“Extracted”表中。代码可以缩短,但为了可读性,我将其保留为硬编码
Sub Button1_Click()
Dim lLastRow As Long
Dim i As Integer
Dim k As Integer
lLastRow = Worksheets("MyData").UsedRange.Rows.Count
k = 1
For i = 1 To lLastRow
If ((Worksheets("MyData").Cells(i, 3) = "Provider" And Worksheets("MyData").Cells(i + 1, 3) = "Patient") And (Worksheets("MyData").Cells(i, 2).Value = Worksheets("MyData").Cells(i + 1, 2).Value)) Then
Worksheets("Extracted").Cells(k, 1) = Worksheets("MyData").Cells(i, 1)
Worksheets("Extracted").Cells(k, 2) = Worksheets("MyData").Cells(i, 2)
Worksheets("Extracted").Cells(k, 3) = Worksheets("MyData").Cells(i, 3)
Worksheets("Extracted").Cells(k + 1, 1) = Worksheets("MyData").Cells(i + 1, 1)
Worksheets("Extracted").Cells(k + 1, 2) = Worksheets("MyData").Cells(i + 1, 2)
Worksheets("Extracted").Cells(k + 1, 3) = Worksheets("MyData").Cells(i + 1, 3)
k = k + 2
End If
Next
End Sub
假设您的数据位于列
A
和B
中,从第2行开始。使用这些公式
C2=和(B2=“提供者”,B3=“患者”)
一路填写公式
D2 =IF(MOD(ROW(D2)-ROW($D$2),2)=0,1/AGGREGATE(14,6,1/(--($C$2:$C$14)*(ROW($C$2:$C$14))*(ROW($C$2:$C$14)>1)),1),1)
D3 =IF(MOD(ROW(D3)-ROW($D$2),2)=0,1/AGGREGATE(14,6,1/(--($C$2:$C$14)*(ROW($C$2:$C$14))*(ROW($C$2:$C$14)>D2-1)),1),D2+1)
向下填充D3
,直到开始获得#NUM
。这将填充从中获取数据所需的所有行号
E2 =INDEX($A$1:$B$14,D2,1)
F2 =INDEX($A$1:$B$14,D2,2)
一直向下填充E2:F2
。这将填充您想要的结果
编辑:
修正指数公式
您可以尝试以下方法:
如果“CancelledBy”在C列中,您可以在D2中使用此公式
=如果(或(和(C2=“提供者”,D1=1)和(C2=“提供者”,C3=“患者”),1,0)
然后复制到从D3到D14的所有行
您需要的所有行都将等于1,然后您可以使用1值筛选列D
我希望这能有所帮助
谢谢为什么不在输出中包括第8行和第9行?它似乎符合你的标准…你尝试了什么配方?您不能将
If()
公式与和()
一起使用吗?您好,CMArg,第8行和第9行不在输出中,因为其不同的患者ID 8 12345 9 54321,因此还有一个标准。。。检查我编辑的答案。很高兴我能帮忙