Как в Excel сделать так, чтобы строка данных в таблице, содержащая определенный текст в одной ячейке, автоматически отображалась в таблице на отдельном листе?

Как в Excel сделать так, чтобы строка данных в таблице, содержащая определенный текст в одной ячейке, автоматически отображалась в таблице на отдельном листе?

Каждую неделю я загружаю отчет с 8 столбцами данных в таблицу. Количество данных меняется каждую неделю по строкам (одна неделя может иметь 40 строк, следующая может иметь 100, но не более 150). Заголовки данных останутся прежними.

Мне нужно иметь возможность автоматически отображать/анализировать все данные в строке, где "HOT: Must Cover" появляется в столбце B, в идентичной таблице на другом листе. Могу ли я как-то использовать VLOOKUP вместе с =IF?

Пример таблицы на листе 1:

введите описание изображения здесь

решение1

Один из вариантов — использовать опцию фильтра в Excel, а затем отсортировать их в алфавитном порядке по столбцу B. Если они вам действительно нужны на отдельном листе, вы можете скопировать и вставить их на следующий лист (так как все они будут сгруппированы в результате сортировки).

В качестве альтернативы вам нужно будет написать макрос, который считывает столбец B в каждой строке и копирует строку, если ее содержимое равно «Hot: Must Cover».

Что-то вроде этого:

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

решение2

Я думаю, что это будет трудно сделать с помощью VLOOKUP(или любого другого поиска). Рассмотрим это решение 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

Связанный контент