No Excel, como posso fazer com que uma linha de dados em uma tabela que contém um texto específico em uma célula apareça automaticamente em uma tabela em uma planilha separada?

No Excel, como posso fazer com que uma linha de dados em uma tabela que contém um texto específico em uma célula apareça automaticamente em uma tabela em uma planilha separada?

Eu baixo um relatório com 8 colunas de dados em uma tabela toda semana. A quantidade de dados muda a cada semana por linha (uma semana pode ter 40 linhas, a próxima pode ter 100, mas não mais que 150). Os cabeçalhos de dados permaneceriam os mesmos.

Eu preciso ter apenas todos os dados em uma linha onde "HOT: Must Cover" aparece na coluna B e aparece/analisa automaticamente em uma tabela idêntica em outra planilha. De alguma forma, eu usaria um VLOOKUP junto com =IF?

Exemplo de tabela na planilha 1:

insira a descrição da imagem aqui

Responder1

Uma opção que você teria seria usar a opção de filtro no Excel e classificá-los em ordem alfabética na coluna B. Se você realmente precisar deles em uma planilha separada, o que você pode fazer é copiá-los e colá-los na próxima planilha (já que todos serão agrupados juntos da classificação).

Alternativamente, você precisaria escrever uma macro que leia a coluna B em cada linha e copie a linha se o conteúdo for "Hot: Must Cover".

Algo nesse sentido:

Dim i as Integer
Dim j as Integer

i = 0
j = 0

Do While Cells(i, 2).value != ""
    if Cells(i, 2).Value == "Hot: Must Cover" Then
        Worksheets("Sheet1").Range(Cells(j, 0), Cells(j, 7).Value = Worksheets("Sheet1").Range(Cells(i, 0), Cells(i, 7).Value
        j = j + 1
    End if
    i=i+1
loop

Responder2

Acho que seria difícil conseguir isso VLOOKUP(ou qualquer outra pesquisa). Considere esta solução VBA:

Sub test    
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim j As Integer

    Set ws1 = Worksheets(1)
    Set ws2 = Worksheets(2)
    j = 1

    For i = 2 To (ws1.Range("A1").ListObject.DataBodyRange.Count + 1)
        If ws1.Range("B" & i).Value = "HOT: Must Cover" Then
            ws1.Range("A" & i & ", G" & i).Copy
            ws2.Range("A" & j).PasteSpecial xlPasteValues
            j = j + 1
        End If
    Next i
End Sub

informação relacionada