小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

セルの入力チェックで変更前の値に戻すのは

VBAでセル毎の入力チェックをする時は、普通、Worksheet_Changeサブルーチンにて行います。
Worksheet_Changeサブルーチンには、VB本体からTargetオブジェクトが渡されます。
Targetオブジェクトは、変更後のデータになっています。
変更後のデータをチェックして、何かのエラーの場合は、変更前の値に戻したいケースが多々ありますね。
しかし、Targetオブジェクトには、変更前のデータがないのです(探しまくったがみつからない)。
さぁー、こまった!


ここで、発想を変えて、Undoすればいいのではないか・・・と思いつく!

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value = "666" Then '何かのエラーの場合(例では666が入力されたとき)
       Application.Undo          '変更前の値に戻にもどす
    End If
End Sub

いや・・・、実は、これを編み出すのに結構時間が掛かってしまった。
Targetオブジェクトの中に変更前の値があるのかを探しまくり、ネットで変更前の値の求め方を探しまくり、結局見つからず・・・。

天の啓示、Undoが閃いたのでした(パチパチ)