質問: initRange End Sub ``` ここでできていないのが、最終行のRange~の部分です。 もともとデータが入っているのにもかかわらず、この処理を走らせると最終的に Range("InitDataRange")の範囲は空になってしまします。 Excelの背景色の設定も含めて初期状態を回避し、 最後に戻すという処理を組み込みたいのですが、 簡単なやり方はありますでしょうか。 よろしくお願いいたします。
回答: テンプレートって? 「テンプレートに直接書き込む」ということ自体に抵抗を感じるので、私もttyp03さんの考え方の方がしっくりきます。 「変更したあと初期状態に戻したい。そのために初期状態を退避しておきたい。」 テンプレートとは、もともとそのために用意するものではないでしょうか。 せっかくテンプレートを用意しているのに、直接書き込んでテンプレートとしては使えなくなってしまうから、書き換える前に退避しておくって、ちょっと無駄を感じます。 テンプレートは参照するだけ 「テンプレートを変更しない」方針で考えると、以下のような処理になると思います。 1、出力用シートを作成する 2、テンプレートシートの内容を出力用シートにコピーする(出力シートの初期化処理) 3、出力用シートのデータを編集(ここの処理ではいろいろやっていますが、割愛) 4、出力用シートを別Bookに出力 5、出力用シートを初期化する(つまり2に戻る) テンプレートシートの内容は終始参照されるだけで、変更はしません。 出力シートは毎回作成した方がきれいな状態ではじめられそうですが、速度を懸念されるようなら最初に作ったものを使いまわして、毎回テンプレートからのコピペでリセットだけすればよいと思います。 シートをキレイにするという意味で、対象範囲だけでなく以下のようにシート全体のコピペでまるごとリセットしてしまうのも手です。 ``` Dim shTmpl As WorkSheet Dim shOutput As WorkSheet Set shTmpl = Sheets("Template") 'テンプレートシート ※シート名は適当 Set shOutput = Sheets("Output") '出力用シート ※シート名は適当 'シート全体のコピペ shTmpl.Copy shOutput ``` 参考になれば幸いです。