VBAでセルに変更はWorkbook_SheetChange

2020年4月21日VBA

セルの値が変更されると実行されるWorkbook_SheeChange関数。

これを使っていたところで無限ループに入ってしまった経験があり、せっかくなので Workbook_SheetChange の使用時の注意点を記載しておきます。

家計簿をVBAで作っているのですが、日々の支出金額を入力すると集計関数を実行し、合計金額がセルに入力(更新)される形でした。

まず、

セルが更新されたイベントWorkbook_SheetChangeを使用。
ワークブック内のシート共有で使うのでブック配下のイベントにしました。

Workbook_SheetChangeの最後で、配列にいれた集計した結果をセルに入力する。
ここが間違いでした。この集計結果をセルに入れる処理が”セルの値が変更された”と認識されるので、この命令文の直後にWorkbook_SheetChangeが呼ばれちゃうんです。


結果関数のネスト呼び出しで、無限ループ突入でした。

改善策
Workbook_SheetChangeが呼ばれた直後、変更されたセルがどのセルかを判定することにしました。
支出を入力するセルであれば、その後のコードを実行するようにします。

まだ最初の月の1月なので再現していませんが、きっと、1月→2月とセルを変更しただけでこの関数が走ってしまいますね。

ブログランキングに参加しています。

VBA

Posted by 一ノ瀬七海