VBAを実行して、セルの値が書き換わると、[アンドゥ] や [Ctrl + Z] では元に戻せないんですよね。
で、元に戻せる方法を考えました。
コード
Sub バックアップしてから処理をする() Call バックアップ Range("G2").Value = "しまった!" End Sub Sub バックアップ() ActiveSheet.Range("B2:G17").Copy Destination:= _ Sheets("BuckUp").Range("B2:G17") End Sub Sub 元に戻す() Sheets("BuckUp").Range("B2:G17").Copy Destination:= _ ActiveSheet.Range("B2:G17") End Sub
解説
まずは、どういった時にバックアップが必要か、を見てみます。
元に戻したいパターン
セル [B2] ~ [G17] の範囲が、表になっています。
セル [G2](黄色セル) は、セル [B17](オレンジ色セル) を参照する数式が入っています。
ある処理を実行したところ、セル [G2](黄色セル) が、想定していない値に書き換わってしまいました。
Sub バックアップしてから処理をする() Call バックアップ Range("G2").Value = "しまった!" End Sub
例として分かり易く、「しまった!」 という値に書き換わる処理を入れてみました。
こういう失敗をしそうな処理の前に、プロシージャー「バックアップ」を Call で呼び出して、バックアップを取っておこう、という考え方です。
バックアップを取る
Sub バックアップ() ActiveSheet.Range("B2:G17").Copy Destination:= _ Sheets("BuckUp").Range("B2:G17") End Sub
プロシージャー「バックアップ」は、
・シート「テーブル」の表を、コピー
・シート「Buckup」に、貼り付け
という処理をしています。
下の図は、プロシージャー「バックアップ」が実行された後の、バックアップ先である、シート「Buckup」の様子です。
罫線や、セル色 などの書式や、数式もバックアップされています。
元に戻す
Sub 元に戻す() Sheets("BuckUp").Range("B2:G17").Copy Destination:= _ ActiveSheet.Range("B2:G17") End Sub
プロシージャー「元に戻す」は、
・シート「Buckup」の 表を、コピー
・シート「テーブル」の表に、貼り付け
という処理になります。
ちなみに、表は、どちらのシートにコピペされる時も、私の環境では「上書き」されています。特に「すでにデータがあります。上書きしますか?」といったメッセージは出て来ませんでした。
問答無用で「上書き」してくれる様です。
※なので間違えてバックアップしないように、、、。
最後に
今回は、シート「Buckup」 をあらかじめ準備しておきました。
これは、新規でシートを作成して、そこにバックアップしても良いですね。
まずは、バックアップを取るヒントになればと思い、一つのパターンを紹介してみました。ご自分の都合に合わせて作ってみて下さい。
コメント