VBAでセルに変更はWorkbook_SheetChange
セルの値が変更されると実行されるWorkbook_SheeChange関数。
これを使っていたところで無限ループに入ってしまった経験があり、せっかくなので Workbook_SheetChange の使用時の注意点を記載しておきます。
家計簿をVBAで作っているのですが、日々の支出金額を入力すると集計関数を実行し、合計金額がセルに入力(更新)される形でした。
まず、
セルが更新されたイベントWorkbook_SheetChangeを使用。
ワークブック内のシート共有で使うのでブック配下のイベントにしました。
Workbook_SheetChangeの最後で、配列にいれた集計した結果をセルに入力する。
ここが間違いでした。この集計結果をセルに入れる処理が”セルの値が変更された”と認識されるので、この命令文の直後にWorkbook_SheetChangeが呼ばれちゃうんです。
結果関数のネスト呼び出しで、無限ループ突入でした。
改善策
Workbook_SheetChangeが呼ばれた直後、変更されたセルがどのセルかを判定することにしました。
支出を入力するセルであれば、その後のコードを実行するようにします。
まだ最初の月の1月なので再現していませんが、きっと、1月→2月とセルを変更しただけでこの関数が走ってしまいますね。
