マクロの取り消しはできる?

マクロの難点は、簡単にCtrl+Zで取り消しでききないことですね。
でも、ある程度簡単なことでしたら、取り消しできます。
別マクロで取り消し動作を書いてあげればいいのです。

エクセルマクロについて教えて下さい。 下記のような条件付き書式のマクロを使用してみたんです、 マクロの動作はこれで問題ないんですが、 A列は文字を入力してしまうと、 ショートカットのやり直し「CTRL+Z」が効きません。。 これはどうしようもないんでしょうか? それともやり直しが効くようにする 書き方があるんでしょうか? --------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim intColor As Integer Dim celcolor As Integer If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub Select Case Target.Value Case Is = "あ" intColor = 1 celcolor = 2 Case Is = "い" intColor = 1 celcolor = 2 Case Is = "う" intColor = 1 celcolor = 3 Case Is = "え" intColor = 1 celcolor = 4 Case Is = "お" intColor = 1 celcolor = 5 End Select Target.Font.ColorIndex = intColor Target.Interior.ColorIndex = celcolor End Sub ----------------

回答が終了になっていましたが、ここで要望のことができるプログラムを掲載しておきます(ソースの一部は質問部分から流用)。


●ポイント

  • 前の値をUndoで持ってくる
  • Application.EnableEventsで変更したときにChangeイベントが発生しないようにする(Undoのとき、元に戻すマクロを動かしたとき)
  • セーブしておく場所は標準モジュール側に記載しておく

●Sheet1側

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim intColor As Integer
Dim celColor As Integer
Dim NowVal As Variant

If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub

intColor = 0
Select Case Target.Value
    Case Is = "あ"
        intColor = 1
        celColor = 2
    Case Is = "い"
        intColor = 1
        celColor = 2
    Case Is = "う"
        intColor = 1
        celColor = 3
    Case Is = "え"
        intColor = 1
        celColor = 4
    Case Is = "お"
        intColor = 1
        celColor = 5
End Select

If intColor <> 0 Then
    NowVal = Target.Value
    Application.EnableEvents = False
    Application.Undo
    OrgVal = Target.Value
    Target.Value = NowVal
    Application.EnableEvents = True
    ActiveCell.Offset(1, 0).Activate
    
    Set OrgTarget = Target
    OrgintColor = Target.Font.ColorIndex
    OrgcelColor = Target.Interior.ColorIndex
    Target.Font.ColorIndex = intColor
    Target.Interior.ColorIndex = celColor
End If

End Sub

●標準モジュール側

Option Explicit

Public OrgintColor As Integer
Public OrgcelColor As Integer
Public OrgVal As Variant
Public OrgTarget As Range

Sub UndoColor()

    OrgTarget.Font.ColorIndex = OrgintColor
    OrgTarget.Interior.ColorIndex = OrgcelColor
    Application.EnableEvents = False
    OrgTarget.Value = OrgVal
    Application.EnableEvents = True

End Sub