【VBAリファレンス|実務向け】セル範囲のデータを選択中の複数シートに一括コピー|Excel VBA

スポンサーリンク

導入:なぜこの技術が重要なのか

業務で「同じフォーマットのシートが複数あり、特定のセルに入力した数式や値を、他の全シートの同じ場所に一括で反映させたい」という場面は非常に多いものです。通常であればコピー&ペーストを繰り返す必要がありますが、シート数が多いと作業ミスや時間の浪費に繋がります。今回紹介するFillAcrossSheetsメソッドを活用すれば、選択中のシート群に対して一瞬でデータを反映させることができ、作業効率が飛躍的に向上します。

基礎知識:FillAcrossSheetsメソッドとは

FillAcrossSheetsメソッドは、Excelの「作業グループへコピー」機能(ホームタブの「フィル」内にあるメニュー)をVBAで実行するものです。このメソッドの最大の特徴は、選択中の全てのシートに対して、指定した範囲の内容(値、数式、書式など)を全く同じセル番地に一括コピーできる点にあります。

実装・解決策

実務で安全に運用するためには、以下の2点に注意が必要です。
1. シートが選択されているかのチェック:複数シートが選択されていない状態で実行するとエラーになる可能性があるため、事前にチェックを行います。
2. ユーザーによる範囲指定:InputBox(Type:=8)を使用することで、ユーザーがマウスでコピーしたい範囲を直感的に指定できるようにします。

サンプルプログラム

以下のコードを標準モジュールにコピーしてご利用ください。

Sub CopyRangeToSelectedSheets()
Dim Rng As Range

‘ 1. 複数シートが選択されているか確認
If ActiveWindow.SelectedSheets.Count < 2 Then MsgBox "対象となる複数シートを選択してから実行してください。", vbExclamation Exit Sub End If ' 2. コピーしたい範囲をマウスで選択させる On Error Resume Next ' キャンセルされた時のエラー回避 Set Rng = Application.InputBox("コピー元の範囲を選択してください", Type:=8) On Error GoTo 0 ' 3. 範囲が正しく選択されたら一括コピーを実行 If Not Rng Is Nothing Then ' xlFillWithAll は「すべてコピー(値・書式・数式)」を指定 ActiveWindow.SelectedSheets.FillAcrossSheets _ Range:=Rng, Type:=xlFillWithAll MsgBox "選択した全シートへコピーが完了しました。", vbInformation End If End Sub

応用・注意点

●引数Typeの使い分け
FillAcrossSheetsの引数Typeには以下の3つが指定可能です。用途に応じて使い分けましょう。
・xlFillWithAll:すべてコピー(値、数式、書式)
・xlFillWithContents:内容のみコピー(数式と値)
・xlFillWithFormats:書式のみコピー

●注意点:範囲の整合性
このメソッドは「同じセル番地」にデータを流し込みます。そのため、コピー元のシートとコピー先のシートで、レイアウトが統一されていることが前提となります。もしシート構成が異なる場合、予期せぬセルが上書きされてしまうリスクがあるため、実行前には必ずテストシートで動作確認を行ってください。また、この操作は「元に戻す(Ctrl+Z)」ができないケースが多いため、重要なデータの場合は事前にバックアップを取る習慣をつけましょう。

タイトルとURLをコピーしました