複数のシートを串刺しコピーする
Excelで雛形のフォーマットを作って、そのマスターシートをコピーして使ってると、マスターを変更したくなることがある。コピーして増殖したシートにはデータが入ってるからシートごと全体コピーというのは却下で、変更点だけ全部のシートに反映したいなんていう状況。2、3枚なら手でコピペするんだけど、1か月分31枚とかあると、「シート切り替え→ペースト」とか何度もやるのは非生産的ですごくめんどくさいんですが大佐ということはよくある話。何よりも美しくない。
というわけで串刺しコピーのマクロ。シートを列挙してループで順次コピーしたくなるところですが、実はFillAcrossSheetsなんてそのまんまなメソッドが標準であったのでこいつを使います。エラー処理は全部省略。
Sub KushizashiCopy() '指定した範囲を選択中のシートにコピー 'コピー元のシートも選択シートに含めること Dim sh As Sheets, Rng As Range Set sh = ActiveWindow.SelectedSheets Set Rng = Application.InputBox("コピー範囲指定", Type:=8) sh.FillAcrossSheets Range:=Rng End Sub
注意点として、選択中のシートにはコピー元のシートを含めないとFillAcrossSheetsメソッドが実行時エラーで失敗します。
#これで小一時間悩みました。関数の名前からコピー先だけを指定したくなりますが、非常に非直感的な仕様です。
あと、言うまでもないですが、番地が変わるような場合は不可です。また、範囲指定に単一セルを指定することは可能ですが、それが結合セルである場合には注意が必要です。InputBoxでマウス入力すると単一セルは範囲ではなくセル番地になりますが、結合セルは範囲として明示的に結合範囲を指定しないとコピー領域がうまく認識されません。
#追記
ここまで書いた挙句、Shift押しながら複数シート選択してまとめて操作できる作業グループという機能を使うとマクロいらないという衝撃の事実が判明。