Sub TEST1()
Dim N
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()
Dim N
'「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」の値を抽出を抽出できました。
複数の条件一致で抽出
複数の条件一致する値を抽出してみます。
Ifの条件を追加します。
A列が「B」で、B列が「名古屋」を抽出
Sub TEST3()
Dim N
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列が「名古屋」を抽出できました。
B列が「名古屋」で、C列が「500以上」を抽出
同じ要領で、Ifの条件を変更することでできます。
Sub TEST4()
Dim N
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以上」を抽出できました。
セルの値を条件にして抽出
セルの値を条件にして抽出することもできます。
Sub TEST5()
Dim N
With Worksheets("Sheet1")
For i = 2 To 10
'B列が「名古屋」の場合
If Worksheets("Sheet2").Cells(i, "B") = .Range("E2") Then
'C列が「500以上」の場合
If Worksheets("Sheet2").Cells(i, "C") >= .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以上」を抽出できました。
オートフィルタを使って条件一致を抽出
次は、「オートフィルタ」を使って条件一致する値を抽出してみます。
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」でフィルタして表全体をコピーします。
オートフィルタを使って抽出できます。
オートフィルタを使って抽出できました。
「見出しを除く」値をコピー
表全体ではなく、表の「見出しを除く」値をコピーする方法でやってみます。
見出しはコピーしたくない場合に使えます。
「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列が「名古屋」を抽出できました。
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以上」します。
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