導入:なぜこの技術が重要なのか
業務で「同じフォーマットのシートが複数あり、特定のセルに入力した数式や値を、他の全シートの同じ場所に一括で反映させたい」という場面は非常に多いものです。通常であればコピー&ペーストを繰り返す必要がありますが、シート数が多いと作業ミスや時間の浪費に繋がります。今回紹介する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)」ができないケースが多いため、重要なデータの場合は事前にバックアップを取る習慣をつけましょう。
