Excel で、1 つのセルに特定のテキストがあるテーブル内のデータ行を、別のシートのテーブルに自動的に表示するにはどうすればよいですか?

Excel で、1 つのセルに特定のテキストがあるテーブル内のデータ行を、別のシートのテーブルに自動的に表示するにはどうすればよいですか?

毎週、8 列のデータを含むレポートをテーブルにダウンロードします。データの量は、毎週行ごとに変わります (1 週間は 40 行、次の週は 100 行ですが、150 行を超えることはありません)。データ ヘッダーは同じままです。

列 B に「HOT: Must Cover」と表示されている行のすべてのデータのみを、別のシートの同一のテーブルに自動的に表示/解析できるようにする必要があります。VLOOKUP を =IF と一緒に使用すればよいのでしょうか?

シート 1 の表の例:

ここに画像の説明を入力してください

答え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

関連情報