Então, depois de descobrir o que você está realmente fazendo. A questão é simples:
"Se o Nome ou a Descrição na Lista Mestra for encontrado na Folha de Dados e também for Ativo, copie-o para uma nova planilha".
Operadores lógicos: ordem de precedência
Aqui está uma revisão do código do seu comentário recente.
Sub Procedure2()
Dim xsht As Worksheet
Dim sht As Worksheet 'original sheet
Dim newsht As Worksheet 'sheet with new data
Set xsht = ThisWorkbook.Worksheets("Xsheet")
Set sht = ThisWorkbook.Worksheets("Sheet1")
Set newsht = ThisWorkbook.Worksheets("Sheet2")
'Set dat = sht.Range("code").Cells(1,1)
Set main = xsht.Range("A1")
Set dat = sht.Range("A1")
Set newdat = newsht.Range("A1")
'initialise counters
Dim i, j, iRow As Integer 'instantiate and initialize the integers
i = 1
j = 1
iRow = 1
'set heading on sheet2
newdat.Offset(0, 0).Value = dat.Offset(0, 0).Value 'copy code
newdat.Offset(0, 1).Value = dat.Offset(0, 2).Value 'copy title
newdat.Offset(0, 2).Value = dat.Offset(0, 3).Value 'copy date
newdat.Offset(0, 3).Value = dat.Offset(0, 4).Value 'copy name
newdat.Offset(0, 4).Value = dat.Offset(0, 5).Value 'copy descr
newdat.Offset(0, 5).Value = dat.Offset(0, 6).Value 'copy status
Do While main.Offset(i, 0).Value <> "" Or main.Offset(i, 1).Value <> ""
j = 1 'reset DataSheet pointer
Do While dat.Offset(j, 0).Value <> ""
If (main.Offset(i, 0).Value = dat.Offset(j, 4).Value _
Or main.Offset(i, 1).Value = dat.Offset(j, 5).Value) _
And dat.Offset(j, 6).Value = "active" Then
newdat.Offset(iRow, 0).Value = dat.Offset(j, 0).Value 'copy code
newdat.Offset(iRow, 1).Value = dat.Offset(j, 2).Value 'copy title
newdat.Offset(iRow, 2).Value = dat.Offset(j, 3).Value 'copy date
newdat.Offset(iRow, 3).Value = dat.Offset(j, 4).Value 'copy name
newdat.Offset(iRow, 4).Value = dat.Offset(j, 5).Value 'copy descr
newdat.Offset(iRow, 5).Value = dat.Offset(j, 6).Value 'copy status
iRow = iRow + 1
End If
j = j + 1 'increment DataSheet pointer; fast moving; changing/resetting
Loop
i = i + 1 'increment XSheet pointer; slow moving outer loop; not resetting
Loop
End Sub
Este código revisado tem QUATRO alterações . Adicionada a verificação no OUTER Loop para incluir espaços em branco no campo Nome, adicionando Or main.Offset(i, 1).Value <> ""
. A alteração de onde as informações estavam sendo avaliadas de i-para-i_valor, para i-to-j_value, na instrução If . A adição de um terceiro contador para colocação de dados na nova planilha para dados copiados para Sheet2. E por fim, um loop aninhado (loop dentro de um loop). Loop-Outer: olha para a lista principal (xSheet) linha por linha; nunca se repete. Loop-Inner: olha para a folha de dados para comparar de cima para baixo; repete cada nova linha na Lista Mestra.
Você pode até alterar a instrução If para considerar "ativo" vs. "Ativo" ou "A" ou "a". É aqui que uma lista suspensa é útil, mas esse é outro problema em si.
If (main.Offset(i, 0).Value = dat.Offset(j, 4).Value _
Or main.Offset(i, 1).Value = dat.Offset(j, 5).Value) _
And (dat.Offset(j, 6).Value = "active" Or dat.Offset(j, 6).Value = "Active") Then