| 
    
     |  | nさんへ 
 いつも有難う御座います。
 ASC(TRIM(CLEAN()))の方はうまくいきましたが、
 もう一方の貼り付け前の状態に戻る方がうまくいきません。
 下記コードを入れても、無反応でした。
 恐らくコード記載方法が違うと思いますが、
 正直、よく分かりません。
 お手数をお掛けしますが、ご指導の程、お願い致します。
 D5:D3000(B列でなくD列でした)に薄く色付けしてます。
 
 Private Sub Worksheet1_Change(ByVal Target As Range)
 Dim sng As Range
 Dim s  As Range
 Set sng = Intersect(Target, Rows("5:3000"), _
 Range("D:D"))
 If Not sng Is Nothing Then
 Application.EnableEvents = False
 ActiveSheet.Unprotect
 For Each s In sng
 If s.Interior.ColorIndex = xlNone Then
 Exit Sub
 Else
 If MsgBox("戻す?", vbYesNo) = vbYes Then
 Application.Undo
 End If
 Next
 ActiveSheet.Protect
 Application.EnableEvents = True
 Set sng = Nothing
 End If
 End Sub
 
 ▼n さん:
 >>メッセージを表示(再試行)して、貼り付け前の状態に戻る...
 >
 >If MsgBox("戻す?", vbYesNo) = vbYes Then
 >  Application.Undo
 >End If
 >みたいな感じですが、何をトリガーにして実行するか、ですね。
 >B5:B3000に薄く色をつけておけば
 >If ...Interior.ColorIndex = xlNone Then
 >で判定するWorksheet_Changeイベントが使えそうな気がしますが。
 >
 >>ASC(TRIM(CLEAN()))で
 >そのまま
 >With Application
 >  Range("B5:B10").Value = .Asc(.Trim(.Clean(Range("B5:B10"))))
 >End With
 >などで。
 >B5以下のデータがある範囲に限定すると良いでしょう。
 >
 >もしくはWorksheet_Changeイベントを使って、入力時にチェックするのでも良いかと。
 
 |  |