Existem alguns problemas com o seu código de exemplo:
sheet.name.Cells ()="Adam" OU "Edward"
- você precisa verificar uma célula de cada vez, em vez de Células ()
- para se referir ao valor da célula, você precisa se referir à propriedade Valor da célula, ou seja, sheet.range (). value="Adam"
- cada comparação (Adam ou Edward) precisa ser avaliada separadamente, ou seja, range (). value="Adam" OU range (). value="Edward"
newsht.Rows.Value (código, título, data, nome, descrição, status)
- O valor não recebe intervalos nomeados como este
- este código não usa o iterador i para dizer qual linha copiar o dados para em sheet2
Experimente o código abaixo. Você pode atribuí-lo a um botão, se desejar. Você precisará alterar o intervalo dat e newdat para se adequar à sua planilha. A principal mudança do seu código é que offset é usado para percorrer as várias linhas e colunas (deslocamento do canto superior esquerdo do bloco de dados) para verificar cada linha de dados. Cada cheque ou cópia é codificado explicitamente.
Sub macro2()
Set sht = ThisWorkbook.Worksheets("Sheet1")
Set newsht = ThisWorkbook.Worksheets("Sheet2")
'Set dat = sht.Range("p9")
Set dat = sht.Range("code").Cells(1, 1)
Set newdat = newsht.Range("c2")
'initialise counters
i = 1
j = 1
'set headings on sheet 2
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 dat.Offset(i, 0).Value <> "" 'loop till code data goes blank
If ((dat.Offset(i, 4).Value = "Adam" Or dat.Offset(i, 4).Value = "Edward") And dat.Offset(i, 6).Value = "active") Then 'check conditions
newdat.Offset(j, 0).Value = dat.Offset(i, 0).Value 'copy code
newdat.Offset(j, 1).Value = dat.Offset(i, 2).Value 'copy title
newdat.Offset(j, 2).Value = dat.Offset(i, 3).Value 'copy date
newdat.Offset(j, 3).Value = dat.Offset(i, 4).Value 'copy name
newdat.Offset(j, 4).Value = dat.Offset(i, 5).Value 'copy descr
newdat.Offset(j, 5).Value = dat.Offset(i, 6).Value 'copy status
j = j + 1
End If
i = i + 1
Loop
End Sub