HOME > 即効テクニック > Excel VBA > その他関連のテクニック > セル範囲のデータを選択中の複数シートに一括コピー

セル範囲のデータを選択中の複数シートに一括コピー|Excel VBA

その他関連のテクニック

セル範囲のデータを選択中の複数シートに一括コピー

(Excel 2000/2002/2003/2007/2010)

サンプルではInputBoxでユーザが指定する範囲のデータを選択中のシートすべてにコピーします。

※指定した範囲と同アドレスのセル範囲へのコピーです。
また、複数のシートを手動で選択するに[Ctrl]キーを押しながら順にシートを選択します。コードから行う場合はArray関数を使用します。

(例)Sheets(Array(1, 2)).Select
   Sheets(Array("Sheet1", "Sheet2")).Select

●サンプル●

Sub CopyRangeToSelectedSheets()
    
    Dim Rng As Range

    '複数シートを選択していない場合は中断
    If ActiveWindow.SelectedSheets.Count < 2 Then
        MsgBox "複数シートを選択してください"
        Exit Sub
    End If
    
    On Error Resume Next 'キャンセル回避
    
    'コピーする範囲を選択する
    Set Rng = Application.InputBox("範囲指定", Type:=8)
    
    On Error GoTo 0 'エラー処理を初期状態に戻す
    
    '対象範囲を選択中のすべてのシートの同位置にコピー
    If TypeName(Rng) = "Range" Then
        ActiveWindow.SelectedSheets.FillAcrossSheets _
            Range:=Rng, Type:=xlFillWithAll
    End If

End Sub

●ポイント●

FillAcrossSheetsメソッドは指定されたセル範囲を、コレクション内の他のすべてのワークシートの同じ領域にコピーします。
このとき、引数Rangeに指定するセル範囲(コピー元のセル範囲)は、コレクション内(選択されたシート内)にある必要があります。

FillAcrossSheetsメソッドの引数Typeには、xlFillWith列挙のメンバ
   xlFillWithAll、xlFillWithContents、xlFillWithFormats
を指定します。

※ マクロ記録すると、xlAll、xlContents、xlFormats で記録されますが(Excel2007で確認)、値はxlFillWith列挙のメンバと同じです。

このメソッドは、複数シートを選択した状態で次の操作をマクロ記録することで確認できます。

【Excel 2007以降】

[ホーム]タブ→[編集]→[フィル]→[作業グループへコピー]

【Excel 2003以前】

[編集]メニュー→[フィル]→[作業グループへコピー]