Я хотел бы предложить вам два метода. Первый не в VBA решение и другой в VBA.
Способ 1:
используйте эту формулу массива в ячейке A2 листа 2.
{=IFERROR(INDEX(Sheet1!$A:$E, SMALL(IF(COUNTIF($G, Sheet1!$A:$A), ROW(Sheet1!$A:$E)-MIN(ROW(Sheet1!$A:$E))+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
надеюсь, это поможет вам.