Я хотел бы предложить вам два метода. Первый - это не VBA Solution, а другой - VBA.
Способ 1:
Используйте эту формулу массива в ячейке A2 листа 2.
{=IFERROR(INDEX(Sheet1!$A$2:$E$6, SMALL(IF(COUNTIF($G$1, Sheet1!$A$2:$A$6), ROW(Sheet1!$A$2:$E$6)-MIN(ROW(Sheet1!$A$2:$E$6))+1), ROW(A1)), COLUMN(A1)),"")}
NB. Перетащите эту формулу вправо в столбец E, затем вниз.
Ячейка G1 на листе 2 имеет код соответствия Q1.
Способ 2:
Sub ExtractDuplicateID()
Dim sht As Worksheet
Dim newsht As Worksheet
Set sht = ThisWorkbook.Worksheets("Sheet1")
Set newsht = ThisWorkbook.Worksheets("Sheet2")
Set dat = sht.Range("A1")
Set newdat = newsht.Range("A1")
Dim i, j
i = 1
j = 1
'Copy Header Values from Sheet1
newdat.Offset(0, 0).Value = dat.Offset(0, 0).Value
newdat.Offset(0, 1).Value = dat.Offset(0, 2).Value
newdat.Offset(0, 2).Value = dat.Offset(0, 3).Value
newdat.Offset(0, 3).Value = dat.Offset(0, 4).Value
newdat.Offset(0, 4).Value = dat.Offset(0, 5).Value
Do While newdat.Offset(i, 0).Value <> "" Or newdat.Offset(i, 1).Value <> ""
j = 1
Do While dat.Offset(j, 0).Value <> ""
If (newdat.Offset(i, 0).Value = dat.Offset(j, 4).Value _
Or newdat.Offset(i, 1).Value = dat.Offset(j, 5).Value) _
And dat.Offset(j, 6).Value = "Q1" Then
'Copy Header Values in Sheet2
newdat.Offset(iRow, 0).Value = dat.Offset(j, 0).Value
newdat.Offset(iRow, 1).Value = dat.Offset(j, 2).Value
newdat.Offset(iRow, 2).Value = dat.Offset(j, 3).Value
newdat.Offset(iRow, 3).Value = dat.Offset(j, 4).Value
newdat.Offset(iRow, 4).Value = dat.Offset(j, 5).Value
iRow = iRow + 1
End If
j = j + 1
Loop
i = i + 1
Loop
End Sub
Надеюсь, это поможет вам.