セル範囲のデータを選択中の複数シートに一括コピー|Excel VBA |
サンプルでは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列挙のメンバと同じです。
このメソッドは、複数シートを選択した状態で次の操作をマクロ記録することで確認できます。
[ホーム]タブ→[編集]→[フィル]→[作業グループへコピー]
[編集]メニュー→[フィル]→[作業グループへコピー]