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の標準機能で入力禁止はできないと思いこんでいました(どこそかの記事による)
これだと単純でいいですね。

この記事が気に入ったらサポートをしてみませんか?