マクロを使用してソリューションを実装しましたが、可能であれば削除したいと考えています。だからここで問題
セルの検証ルールを使用してドロップダウンを実装しました。同じシートの2番目のセルの値に応じて、そのセルを読み取り専用にしたい。
別の検証を使用してロックしようとしましたが、許可されません。
何か案が?
マクロを使用してソリューションを実装しましたが、可能であれば削除したいと考えています。だからここで問題
セルの検証ルールを使用してドロップダウンを実装しました。同じシートの2番目のセルの値に応じて、そのセルを読み取り専用にしたい。
別の検証を使用してロックしようとしましたが、許可されません。
何か案が?
ユーザーが新しいデータを入力するのを防ぐには、Data Validation
編集:リストで数式を使用する
ケータリングの責任者のコメントのおかげで、データ検証/リストで数式を使用できることを覚えておく価値があります。
これが実際に動作していることを確認するには、別のスレッドに対する彼の回答を参照してください:https ://stackoverflow.com/a/11902463/138938
元の投稿
Excel 2007のチュートリアル:
=IF(A1="",FALSE,TRUE)
したがって、A1がまだ空の場合、セルに値を入力することはできません。
データ検証がセルA2
にあり、チェックしている値がセルにあると想定していますA1
cell の値A1
を「Blah Blah」に変更すると、コードが実行されて cell がロックされますA2
。実際に実行する前に、コード内のコメントをよく読んでください。
コードは、ワークシートのコード領域に貼り付ける必要があります。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
Dim mypassword As String, StringToCheck As String
On Error GoTo Whoa
'~~> Change the password here to protect/unprotect the sheet
mypassword = "password"
'~~> Change it to the relevant string with which you want to compare
StringToCheck = "Blah Blah"
If Not Intersect(Target, Range("A1")) Is Nothing Then
'~~> Check for the cell value
If Target.Value = StringToCheck Then
'~~> Un-Protect the sheet
ActiveSheet.Unprotect mypassword
'~~> Lock the cell
Range("A2").Locked = True
'~~> Re-Protect the sheet
ActiveSheet.Protect mypassword
End If
End If
LetsContinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
動作するようになりましたが、実際に値を設定できるのは、ドロップダウンで動作する場合のみです
Name Manager を使用して名前test
を値に設定しました=IF(Sheet1!$A$1=1,"",Sheet1!$E$1:$E$5)
これは、A1
が 1 の場合A1
は何も取得せず、それ以外の場合は E1:E5 を取得することを意味します。
次に、データ検証をに設定しList
、ソースを使用して、テストがリストを返す=test
ときにのみ値を設定できます
これを行うと、A1 が 1 のときに、検証ドロップダウンに空のリストが表示され、値を変更できません。A1 が 1 でない場合、E1:E5 のリストを取得し、値を変更できます