Excel VBAを使用すると、特定の範囲やセルをコピーして、繰り返し貼り付ける処理を自動化できます。このような操作は、データの複製やテンプレートの生成などに役立ちます。
コピーと貼り付けを繰り返す方法について解説します。
目次
Excel VBAでコピーして貼り付ける方法
コピーと貼り付けの基本操作
Sub BasicCopyPaste()
' A1セルの値をコピーしてB1セルに貼り付ける
Range("A1").Copy
Range("B1").PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False ' コピー状態を解除
End Sub
Range("A1").Copy: セルA1をコピーします。【VBA】シートのコピーを自動化(AddメソッドとCopyメソッド)Range("B1").PasteSpecial: コピーした内容B1を貼り付けます。【VBA】Excel VBAのPasteSpecialメソッドの活用方法Application.CutCopyMode = False: コピー状態を解除して、画面の一旦を保留します。【VBA】Application.CutCopyMode:コピー・カットモード解除
コピーと貼り付けを繰り返す方法
VBAのループを使用して、コピーと貼り付けの操作を繰り返すことができます。【VBA】別シートのセルの値を取得:ループ処理
【使用例: 同じデータを複数行に貼り付ける】
Sub RepeatCopyPaste()
Dim i As Integer
Dim sourceRange As Range
Dim targetRange As Range
Set sourceRange = Range("A1") ' コピー元
Application.ScreenUpdating = False ' 画面更新を停止
' 10回コピー&貼り付けを繰り返す
For i = 1 To 10
Set targetRange = Cells(i, 2) ' 貼り付け先(B列のi行目)
sourceRange.Copy
targetRange.PasteSpecial Paste:=xlPasteAll
Next i
Application.CutCopyMode = False ' コピー状態を解除
Application.ScreenUpdating = True ' 画面更新を再開
MsgBox "コピー&貼り付けが完了しました。"
End Sub
【VBA】Application.ScreenUpdatingプロパティの使用方法と特徴
複数セルのコピーと貼り付け
【使用例: 範囲をコピーして指定範囲に貼り付ける】
Sub CopyPasteRange()
Dim sourceRange As Range
Dim targetRange As Range
Set sourceRange = Range("A1:A3") ' コピー元
Set targetRange = Range("B1:B3") ' 貼り付け先
sourceRange.Copy
targetRange.PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False ' コピー状態を解除
End Sub
貼り付け先を動的に設定する
コピーしたデータを、最終行の次の行に繰り返し貼り付けます。
【使用例: 最終行の次にデータを貼り付ける】
Sub CopyToNextRow()
Dim lastRow As Long
Dim sourceRange As Range
Dim targetCell As Range
Set sourceRange = Range("A1:A3") ' コピー元
Application.ScreenUpdating = False ' 画面更新を停止
' B列の最終行を取得
lastRow = Cells(Rows.Count, 2).End(xlUp).Row
Set targetCell = Cells(lastRow + 1, 2) ' 最終行の次のセル
' コピー&貼り付け
sourceRange.Copy
targetCell.PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False ' コピー状態を解除
Application.ScreenUpdating = True ' 画面更新を再開
MsgBox "最終行の次にデータを貼り付けました。"
End Sub
条件付きでコピーと貼り付けを繰り返す
データの値に基づいてコピーと貼り付けを行います。
【使用例: 特定の条件を満たす行のみコピー】
Sub ConditionalCopyPaste()
Dim cell As Range
Dim targetRow As Long
targetRow = 1 ' 貼り付け開始行
Application.ScreenUpdating = False ' 画面更新を停止
' A列のデータをチェック
For Each cell In Range("A1:A10")
If cell.Value > 50 Then ' 条件: 値が50より大きい
cell.Copy
Cells(targetRow, 2).PasteSpecial Paste:=xlPasteAll
targetRow = targetRow + 1 ' 貼り付け先を次の行に移動
End If
Next cell
Application.CutCopyMode = False ' コピー状態を解除
Application.ScreenUpdating = True ' 画面更新を再開
MsgBox "条件を満たすデータのコピー&貼り付けが完了しました。"
End Sub
書式を保持しながらコピー
値と書式だけをコピーする場合は、PasteSpecialを活用します。
【使用例: 値と書式をコピー】
Sub CopyValuesAndFormats()
Dim sourceRange As Range
Dim targetRange As Range
Set sourceRange = Range("A1:A3") ' コピー元
Set targetRange = Range("B1:B3") ' 貼り付け先
' 値を貼り付け
sourceRange.Copy
targetRange.PasteSpecial Paste:=xlPasteValues
' 書式を貼り付け
sourceRange.Copy
targetRange.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False ' コピー状態を解除
MsgBox "値と書式を貼り付けました。"
End Sub
注意事項
- パフォーマンスの最適化:
- 大量のデータを処理する場合、
Application.ScreenUpdating = Falseを活用して画面更新を一時的に停止すると処理速度が向上します。
- 大量のデータを処理する場合、
- コピー状態の解除:
- 操作後に
Application.CutCopyMode = False必ず実行して、コピー状態を解除してください。
- 操作後に
- エラーチェック:
- 対象範囲が空の場合や、指定したセルが無い場合のエラーに対応するコードを追加すると、コードがより安定します。
まとめ
Excel VBAを使ってコピーと貼り付けを行うことで、データの加工やテンプレート作成が効率的になります。基本的な方法から応用例までを業務に合わせた自動化を実現してください。