VBAで自動化 VBA一覧 コピー&ペースト セル・値の取得と貼り付け

【VBA】コピーして貼り付けを繰り返す方法

Excel VBAを使用すると、特定の範囲やセルをコピーして、繰り返し貼り付ける処理を自動化できます。このような操作は、データの複製やテンプレートの生成などに役立ちます。

コピーと貼り付けを繰り返す方法について解説します。

Excel VBAでコピーして貼り付ける方法

コピーと貼り付けの基本操作

Sub BasicCopyPaste()

' A1セルの値をコピーしてB1セルに貼り付ける
Range("A1").Copy
Range("B1").PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False ' コピー状態を解除

End Sub

コピーと貼り付けを繰り返す方法

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

注意事項

  1. パフォーマンスの最適化:
    • 大量のデータを処理する場合、Application.ScreenUpdating = Falseを活用して画面更新を一時的に停止すると処理速度が向上します。
  2. コピー状態の解除:
    • 操作後にApplication.CutCopyMode = False必ず実行して、コピー状態を解除してください。
  3. エラーチェック:
    • 対象範囲が空の場合や、指定したセルが無い場合のエラーに対応するコードを追加すると、コードがより安定します。

まとめ

Excel VBAを使ってコピーと貼り付けを行うことで、データの加工やテンプレート作成が効率的になります。基本的な方法から応用例までを業務に合わせた自動化を実現してください。

    -VBAで自動化, VBA一覧, コピー&ペースト, セル・値の取得と貼り付け