Vba: 条件に基づいて行を別のシートにコピーする
VBA で次の構文を使用すると、特定の基準を満たすシート内の各行を別のシートにコピーできます。
Sub CopyToAnotherSheet()
Dim LastRow As Long
'Find last used row in a Column A of Sheet1
With Worksheets(" Sheet1 ")
LastRow = .Cells(.Rows.Count, " A ").End(xlUp).Row
End With
'Find first row where values should be posted in Sheet2
With Worksheets(" Sheet2 ")
j = .Cells(.Rows.Count, " A ").End(xlUp).Row + 1
End With
'Paste each row that contains "Mavs" in column A of Sheet1 into Sheet2
For i = 1 TB LastRow
With Worksheets(" Sheet1 ")
If .Cells(i, 1).Value = "Mavs" Then
.Rows(i).Copy Destination:=Worksheets(" Sheet2 ").Range(" A " & j)
j = j + 1
End If
End With
Next i
End Sub
この特定のマクロは、列 A が「Mavs」に等しいSheet1の各行をコピーし、それらの各行をSheet2の次に使用可能な行に貼り付けます。
次の例は、この構文を実際に使用する方法を示しています。
例: VBA を使用して条件に基づいて行を別のシートにコピーする
シート 1に、さまざまなバスケットボール選手に関する情報を含む次のデータセットがあるとします。
Sheet2に次のデータ セットがあるとします。
Sheet2にはウォリアーズ チームの選手に関するデータのみが含まれていることに注意してください。
Team 列が Mavs に等しいSheet1から各行をコピーし、それらの各行をSheet2の次に使用可能な行に貼り付けたいとします。
これを行うには、次のマクロを作成できます。
Sub CopyToAnotherSheet()
Dim LastRow As Long
'Find last used row in a Column A of Sheet1
With Worksheets(" Sheet1 ")
LastRow = .Cells(.Rows.Count, " A ").End(xlUp).Row
End With
'Find first row where values should be posted in Sheet2
With Worksheets(" Sheet2 ")
j = .Cells(.Rows.Count, " A ").End(xlUp).Row + 1
End With
'Paste each row that contains "Mavs" in column A of Sheet1 into Sheet2
For i = 1 TB LastRow
With Worksheets(" Sheet1 ")
If .Cells(i, 1).Value = "Mavs" Then
.Rows(i).Copy Destination:=Worksheets(" Sheet2 ").Range(" A " & j)
j = j + 1
End If
End With
Next i
End Sub
このマクロを実行すると、 Sheet2に次の出力が表示されます。
Sheet1のチーム名が Mavs に等しい各行は、 Sheet2の次に使用可能な行に貼り付けられていることに注意してください。
注: VBA Copyメソッドの完全なドキュメントはここにあります。
追加リソース
次のチュートリアルでは、VBA で他の一般的なタスクを実行する方法について説明します。
VBA: 最後に使用された行を見つける方法
VBA: 範囲内の行数をカウントする方法
VBA: 使用されている列の数を数える方法