Excelのセルの入力禁止措置
Excelのセルの入力禁止は、いままでバッファをもって元に戻すという処置をしていましたが、もっと簡単にシートの保護で対応可能なようです。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Columns("G")) Is Nothing Then
Dim ws As Worksheet
Set ws = Me
Dim CheckCell As Range
Set CheckCell = ws.Range("G" & Target.Row) 'G列のセルを指定
Dim AffectedRange As Range
Set AffectedRange = ws.Range("H" & Target.Row & ":K" & Target.Row) '影響を受ける範囲HからK列
Application.EnableEvents = False 'イベントを一時的に無効化
ws.Unprotect
' G列に数式がない場合、H-K列をグレーアウトし、ロックする
If Not CheckCell.HasFormula Then
With AffectedRange
.Interior.Color = RGB(200, 200, 200) 'グレーアウト
.Locked = True 'セルをロック
End With
Else
' G列に数式がある場合、H-K列のグレーアウトとロックを解除する
With AffectedRange
.Locked = False 'セルのロックを解除
.Interior.ColorIndex = xlNone 'セルの色を元に戻す
End With
End If
ws.Protect
Application.EnableEvents = True 'イベントを再度有効化
End If
End Sub
ここではG列に式がある場合はロック解除し、上書きなどで式がない場合はグレーアウトしロックして入力を禁止します。
いままでExcelの標準機能で入力禁止はできないと思いこんでいました(どこそかの記事による)
これだと単純でいいですね。