大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、条件一致した値を抽出する方法として、「ForとIfを組み合わせる」方法と「オートフィルタ」を使う使う方法があります。「オートフィルタ」を使った方がシンプルで、複数条件に一致した値の抽出も簡単にできます。値の抽出は実務ではよく使うのでマスターしていきましょう。

はじめに

この記事では、条件一致した値を抽出する方法について、ご紹介します。

実務では、よくやる作業ですね。

やり方として、2つの方法でやってみます。

  • ForとIfを組み合わせて抽出
  • オートフィルタを使って抽出

断然、「オートフィルタ」を使って抽出する方が簡単です。

複数条件に一致した値の抽出も簡単にできます。

条件に一致した値の抽出は実務でよく使うのでマスターしていきましょう。

では、条件一致した値を抽出する方法について、解説していきます。

この記事で紹介すること

  • 条件一致した値を抽出する方法

目次

ForとIfを組み合わせて条件一致を抽出

ForとIfを組み合わせて条件一致した値を抽出してみます。

1つの条件一致で抽出

「ForとIfを組み合わせて」1つの条件一致で抽出してます。

手順としては、

  • 表をループして条件に一致するセルを探す
  • 抽出元シートの最終行を取得
  • 一致したセルの3列分をコピーして最終行+1に貼り付け

という感じです。

ForとIfを組み合わせて抽出

Sub TEST1()
    
    For i = 2 To 10
        'A列が「B」の場合
        If Worksheets("Sheet2").Cells(i, "A") = "B" Then
            'Sheet1の最終行を取得
            n = Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row
            '一致したデータを最終行の1行下にコピー
            Worksheets("Sheet2").Cells(i, "A").Resize(, 3).Copy Worksheets("Sheet1").Cells(n + 1, "A")
        End If
    Next
    
End Sub

ちょっと長いので、「With」でくくっておきます。

「With」でくくる

Sub TEST2()
    
    '「With」でくくる
    With Worksheets("Sheet1")
        For i = 2 To 10
            'A列が「B」の場合
            If Worksheets("Sheet2").Cells(i, "A") = "B" Then
                'Sheet1の最終行を取得
                n = .Cells(Rows.Count, "A").End(xlUp).Row
                '一致したデータを最終行の1行下にコピー
                Worksheets("Sheet2").Cells(i, "A").Resize(, 3).Copy .Cells(n + 1, "A")
            End If
        Next
    End With
    
End Sub

表を用意しておきます。

Sheet1が抽出元シートで、Sheet2が抽出先のシートです。

表を用意

表を用意

では、VBAコードを実行してみます。

A列が「B」の値を抽出します。

A列が「B」の値を抽出

A列が「B」の値を抽出

では、結果をみてみます。

抽出できた

抽出できた

A列が「B」の値を抽出を抽出できました。

複数の条件一致で抽出

複数の条件一致する値を抽出してみます。

Ifの条件を追加します。

A列が「B」で、B列が「名古屋」を抽出

Sub TEST3()
    
    With Worksheets("Sheet1")
        For i = 2 To 10
            'A列が「B」の場合
            If Worksheets("Sheet2").Cells(i, "A") = "B" Then
                'B列が「名古屋」の場合
                If Worksheets("Sheet2").Cells(i, "B") = "名古屋" Then
                    '最終行を取得
                    n = .Cells(Rows.Count, "A").End(xlUp).Row
                    '一致したデータを最終行の1行下にコピー
                    Worksheets("Sheet2").Cells(i, "A").Resize(, 3).Copy .Cells(n + 1, "A")
                End If
            End If
        Next
    End With
    
End Sub

表を用意します。

表を用意します

表をループしてA列が「B」で、B列が「名古屋」のセルをコピーしていきます。

表をループしてA列が「B」で、B列が「名古屋」のセルをコピーしていきます

A列が「B」で、B列が「名古屋」を抽出できます。

A列が「B」で、B列が「名古屋」を抽出できました

A列が「B」で、B列が「名古屋」を抽出できました。

B列が「名古屋」で、C列が「500以上」を抽出

同じ要領で、Ifの条件を変更することでできます。

Sub TEST4()
    
    With Worksheets("Sheet1")
        For i = 2 To 10
            'B列が「名古屋」の場合
            If Worksheets("Sheet2").Cells(i, "B") = "名古屋" Then
                'C列が「500以上」の場合
                If Worksheets("Sheet2").Cells(i, "C") >= 500 Then
                    '最終行を取得
                    n = .Cells(Rows.Count, "A").End(xlUp).Row
                    '一致したデータを最終行の1行下にコピー
                    Worksheets("Sheet2").Cells(i, "A").Resize(, 3).Copy .Cells(n + 1, "A")
                End If
            End If
        Next
    End With
    
End Sub

表を用意します。

表を用意します

表をループしてB列が「名古屋」で、C列が「500以上」をコピーしていきます。

表をループしてB列が「名古屋」で、C列が「500以上」をコピーしていきます

B列が「名古屋」で、C列が「500以上」を抽出できます。

B列が「名古屋」で、C列が「500以上」を抽出できました

B列が「名古屋」で、C列が「500以上」を抽出できました。

セルの値を条件にして抽出

セルの値を条件にして抽出することもできます。

Sub TEST5()
    
    With Worksheets("Sheet1")
        For i = 2 To 10
            'B列が「名古屋」の場合
            If Worksheets("Sheet2").Cells(i, "B") = Worksheets("Sheet1").Range("E2") Then
                'C列が「500以上」の場合
                If Worksheets("Sheet2").Cells(i, "C") >= Worksheets("Sheet1").Range("F2") Then
                    '最終行を取得
                    n = .Cells(Rows.Count, "A").End(xlUp).Row
                    '一致したデータを最終行の1行下にコピー
                    Worksheets("Sheet2").Cells(i, "A").Resize(, 3).Copy .Cells(n + 1, "A")
                End If
            End If
        Next
    End With
    
End Sub

条件をセルに入力します。

条件を入力

条件を入力します

B列が「名古屋」で、C列が「500以上」を抽出します。

B列が「名古屋」で、C列が「500以上」を抽出

B列が「名古屋」で、C列が「500以上」を抽出します

これで、B列が「名古屋」で、C列が「500以上」を抽出できます。

抽出できた

B列が「名古屋」で、C列が「500以上」を抽出できました

B列が「名古屋」で、C列が「500以上」を抽出できました。

オートフィルタを使って条件一致を抽出

次は、「オートフィルタ」を使って条件一致する値を抽出してみます。

1つの条件一致で抽出

まずは、「1つ」の条件一致で抽出

手順としては、

  • オートフィルタで条件をフィルタ
  • オートフィルタの結果をコピー
  • オートフィルタを解除

という感じです。

オートフィルタを使って抽出

Sub TEST6()
    
    'A列を「B」でフィルタ
    Worksheets("Sheet2").Range("A1").AutoFilter 1, "B"
    
    'フィルタ結果をSheet1にコピー
    Worksheets("Sheet2").Range("A1").CurrentRegion.Copy Worksheets("Sheet1").Range("A1")
    
    'オートフィルタを解除
    Worksheets("Sheet2").Range("A1").AutoFilter
    
End Sub

表を用意します。

表を用意します

A列を「B」でフィルタして表全体をコピーします。

A列を「B」でフィルタして表全体をコピーします

オートフィルタを使って抽出できます。

オートフィルタを使って抽出できました

オートフィルタを使って抽出できました。

「見出しを除く」値をコピー

表全体ではなく、表の「見出しを除く」値をコピーする方法でやってみます。

見出しはコピーしたくない場合に使えます。

「Resize」と「Offset」を組み合わせて使います。

Sub TEST7()
    
    'A列を「B」でフィルタ
    Worksheets("Sheet2").Range("A1").AutoFilter 1, "B"
    
    'フィルタ結果の「見出しを除くセル範囲」をSheet1にコピー
    With Worksheets("Sheet2").Range("A1").CurrentRegion
        .Resize(.Rows.Count - 1).Offset(1, 0).Copy Worksheets("Sheet1").Range("A2")
    End With
    
    'オートフィルタを解除
    Worksheets("Sheet2").Range("A1").AutoFilter
    
End Sub

表を用意します。

表を用意します

「見出しを除く」値をコピーします。

「Resize」と「Offset」を組み合わせるのがポイントです。

「見出しを除く」値をコピーします

オートフィルタを使って抽出できます。

オートフィルタを使って抽出できました

オートフィルタを使って抽出できました。

複数の条件一致で抽出

「オートフィルタ」を使えば、「複数の条件一致」で抽出するのも簡単です。

A列が「B」で、B列が「名古屋」を抽出

A列が「B」で、B列が「名古屋」を抽出してみます。

フィルタする列を増やしてあげればできます。

Sub TEST8()
    
    'A列を「B」でフィルタ
    Worksheets("Sheet2").Range("A1").AutoFilter 1, "B"
    'B列を「名古屋」でフィルタ
    Worksheets("Sheet2").Range("A1").AutoFilter 2, "名古屋"
    
    'フィルタ結果の「見出しを除くセル範囲」をSheet1にコピー
    With Worksheets("Sheet2").Range("A1").CurrentRegion
        .Resize(.Rows.Count - 1).Offset(1, 0).Copy Worksheets("Sheet1").Range("A2")
    End With
    
    'オートフィルタを解除
    Worksheets("Sheet2").Range("A1").AutoFilter
    
End Sub

表を用意します。

表を用意します

A列が「B」で、B列が「名古屋」をフィルタしてコピーします。

A列が「B」で、B列が「名古屋」をフィルタしてコピーします

A列が「B」で、B列が「名古屋」を抽出できます。

A列が「B」で、B列が「名古屋」を抽出できました

A列が「B」で、B列が「名古屋」を抽出できました。

B列が「名古屋」で、C列が「500以上」を抽出

B列が「名古屋」で、C列が「500以上」を抽出

Sub TEST9()
    
    'B列を「名古屋」でフィルタ
    Worksheets("Sheet2").Range("A1").AutoFilter 2, "名古屋"
    'C列を「500以上」でフィルタ
    Worksheets("Sheet2").Range("A1").AutoFilter 3, ">=500"
    
    'フィルタ結果の「見出しを除くセル範囲」をSheet1にコピー
    With Worksheets("Sheet2").Range("A1").CurrentRegion
        .Resize(.Rows.Count - 1).Offset(1, 0).Copy Worksheets("Sheet1").Range("A2")
    End With
    
    'オートフィルタを解除
    Worksheets("Sheet2").Range("A1").AutoFilter
    
End Sub

表を用意します。

表を用意します

B列が「名古屋」で、C列が「500以上」をフィルタしてコピーします。

B列が「名古屋」で、C列が「500以上」をフィルタしてコピーします

B列が「名古屋」で、C列が「500以上」を抽出できます。

B列が「名古屋」で、C列が「500以上」を抽出できました

B列が「名古屋」で、C列が「500以上」を抽出できました。

セルの値を条件にして抽出

「オートフィルタ」を使う方法で、「セルの値」を条件にして抽出してみます。

B列が「名古屋」で、C列が「500以上」します。

Sub TEST10()
    
    'B列を「名古屋」でフィルタ
    Worksheets("Sheet2").Range("A1").AutoFilter 2, Worksheets("Sheet1").Range("E2")
    'C列を「500以上」でフィルタ
    Worksheets("Sheet2").Range("A1").AutoFilter 3, Worksheets("Sheet1").Range("F2")
    
    'フィルタ結果の「見出しを除くセル範囲」をSheet1にコピー
    With Worksheets("Sheet2").Range("A1").CurrentRegion
        .Resize(.Rows.Count - 1).Offset(1, 0).Copy Worksheets("Sheet1").Range("A2")
    End With
    
    'オートフィルタを解除
    Worksheets("Sheet2").Range("A1").AutoFilter
    
End Sub

セルに条件を入力します。

条件を入力

セルに条件を入力します

B列が「名古屋」で、C列が「500以上」をフィルタしてコピーします。

B列が「名古屋」で、C列が「500以上」をフィルタしてコピー

B列が「名古屋」で、C列が「500以上」をフィルタしてコピーします

これで、B列が「名古屋」で、C列が「500以上」の値を抽出できます。

抽出できた

抽出できました

抽出できました。

オートフィルタ便利です。

おわりに

この記事では、条件一致した値を抽出する方法について、ご紹介しました。

やり方として、2つを紹介しました。

  • ForとIfを組み合わせて抽出
  • オートフィルタを使って抽出

断然、「オートフィルタ」を使って抽出する方が簡単です。

複数条件に一致した値の抽出も簡単にできます。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す