エクセルVBAは、データと連携できる点が非常に便利なのですが、少し不便な点があります。それは、VBAプログラムによる変更が、エクセルのアンドゥ機能により、元に戻せないという点です。
VBAは自由にプログラムが作成できるので、図形などのオブジェクト、セルの値など、様々なものが、変更の対象となってきます。従って、これら全てを、元に戻すアンドゥ機能を自分で実装しようとすると非常に複雑な構造になってしまいます。しかし、VBAにより、変更した内容を元に戻したいというニーズは、エクセルを使っていれば、少なからず発生するはずです。
ですので、今回は、比較的シンプルな構造で実装できる、アンドゥの対象をセルの値に限定した仕様のサンプルコードを紹介してみたいと思います。
サンプルコードは、請求書を作成するサンプルで、アンドゥの対象は、帳票内のVBAにより変更したセルが対象となっています。良かったら参考にしてみてください。
ソースコードは、Microsoft社の製品 エクセル向けに書いたものなので、利用するには、ご使用のコンピュータに、エクセルがインストールされていることが、必須条件です。
以下は、サンプル画面です。
商品マスタ、店舗マスタは、私が作成したデータです。サンプルの顧客データは、300件の架空の個人情報です。このデータは、個人情報テストデータジェネレーターにより、作成したサンプルデータの一部を変更して利用しています。サンプルデータに含まれる個人名などの情報は、実在の人物とはまったく関係ありません。
アンドゥは、隠しエクセルシート(非表示)を利用しています。帳票のイメージ(領域)をアンドゥの回数分、縦方向に関連付けています。縦方向には、まだまだ空きがありますので、容易に回数を増やすことができるかと思います。また、横方向についても、多分に空きがありますので、横方向へも利用できるよう改善してみては、いかがでしょうか。
また、アンドゥバッファの位置も一緒に保存することで、一旦エクセルを終了しても、アンドゥ・リドゥができる仕様に変更できると思います。
編集領域が広い場合などは、エクセルシートやブックそのものを一つのアンドゥバッファとして、実装するのも良いのではないでしょうか。
作者は、本ソフトウェアの使用または使用不能から生じるコンピュータの故障、情報の消失、その他あらゆる直接的及び間接的被害に関して一切の責任を負いません。
ご使用にあたり、改善の要望、不具合の発生等ありましたら、画面下のアドレスまで、ご連絡頂きますよう、宜しくお願いいたします。ご面倒、ご不便をお掛けしますが、宜しくお願いいたします。