您好我在下面有一个Excel表格列
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或宏来执行此操作。我整天都在尝试,但没有快乐。
感谢
答案 0 :(得分:1)
已修改以下内容可能有所帮助。数据应该在工作表“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
答案 1 :(得分:0)
假设您的数据位于从def up (a, s, Bmax):
counter = 0
while True:
if counter == s : break
if a == Bmax : break
if a == 255 : break
a += 1
counter += 1
开始的A
和B
列中。使用这些公式
C2 = AND(B2 ="提供者",B3 ="患者")
完全填充公式
row 2
填写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)
完全填满。这应该填充您想要的结果。
修改强>
答案 2 :(得分:0)
你可以试试这个:
如果“CancelledBy”在C列中,您可以在D2中使用此公式
= IF(OR(AND(C2 = “提供者”,D1 = 1),和(C2 = “提供者”,C3 = “患者”)),1,0)
然后复制到D3到D14的所有行
您需要的所有行都将等于1,然后您可以使用1值过滤D列。
我希望这可以提供帮助。
由于