• 締切済み

[Excel VBA 2003] Worksheet_Changeでセルの削除・挿入を識別する方法

Excel VBAのWorksheet_Change関数でセルが削除・挿入されたことを識別することはできますか?Worksheet_Change以外でも方法があれば教えてください。

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

行全体や列全体に対する削除/挿入だったら、最大使用領域の右下セルなど、監視ポイントとするセルを決めて モジュールレベルでRange型変数に記憶させ、Changeイベント後の変化を見ればいいと思います。 ですが、単独セルの削除/挿入に関しても識別したい場合は、判定できません。 単独セルのケースも対応したいなら、使用許可領域を決め、その最右列、最下行のセルに 1 って入れておいて Changeイベント後のSUM値の変化で識別するなど、が考えられます。 でもその場合、削除/挿入でなくても行全体をクリアされたりすると困るので、 シート保護で対応する必要も出てきますね。 ...という事は、最初からシート保護で削除/挿入できなくしておいて、 削除/挿入を実行するマクロを別途作成し、それを右クリックメニューなどに登録しておけば 識別の必要もなくなって簡単じゃないかと思うのですけど。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

ActiveSheet.Cells.SpecialCells(xlLastCell).Address でChange後の最終セルのアドレスを取得して、 Application.Undo でUndoして ActiveSheet.Cells.SpecialCells(xlLastCell).Address でChange前の最終セルのアドレスを取得して、 Change前とChange後の最終セルのアドレスを比較してみては? 検証していないので、うまくいくかどうかは解りません。

関連するQ&A