実務上、セル変更履歴を求められる場面があったりします。今日は、変更履歴を隣セルに残す方法を見てみましょう。

 

変更履歴を隣セルに保存する

 

Private Sub Worksheet_Change(ByVal Target As Range)

    ' 特定セル以外の場合、イベント起動せずにする
    If Application.Intersect(Target, Range("B4", "B10")) Is Nothing Then Exit Sub

       ' 変更セルが2以上ある場合
       If Target.Count <> 1 Then

    
       ' イベントを一旦無効にする
       Application.EnableEvents = False
    
       ' ユーザの操作を1つ戻す
       Application.Undo

       MsgBox "2以上のセルは変更できません。", 16
    
       ' イベントを有効にする
       Application.EnableEvents = True
        
       Exit Sub  'イベントを終了する
    End If

    
    ' イベントを一旦無効にする
    Application.EnableEvents = False
    
    
    Dim xlAfter As Variant     '変更後の値を格納
    xlAfter = Target.Value
    
    Dim xlChange As Range  '移動後セル
    
    ' 移動後セルをアクティブにする(動きを自然にする)
    Set xlChange = ActiveCell
    
    
    ' ユーザの操作を1つ戻す
    Application.Undo

    ' 履歴をとなりセルに保存
    Target.Offset(0, 1).Value = Target.Value
    
    ' 移動後の値を設定する
    Target.Value = xlAfter
    
    ' 移動後のセルに戻す
    xlChange.Select

    'イベントを有効にする
    Application.EnableEvents = True

End Sub

 

 

コードの入力先は、いつもの標準モジュールではなく、VBE画面なか「Sheet1(sheet1)」をクリックし、右のコード欄に入れてください。

 

実行結果

 

 

 

― ― ― ― ― ― ― ― ― ― → Excel VBA基礎入門もくじ へ戻る 

 

参考記事