- ベストアンサー
EXCELで条件によってセルをロックする方法
A列に入力規制を使用して「A」「B」「C」のみ入力できるように設定してあります。 現在B列には、A列が「A」または「B」の場合は入力不可、「C」の場合は自由に入力できるような入力規制を掛けていますが、どうしても前後のデータをコピペしてしまう人が出てきてしまって困っています。 A列によってB列にロック(選択自体できなくする)するような都合の良い方法はないでしょうか? なお、このシートには関数や計算式、他のシートへのリンク等がかなり使用されているので、列や行の追加・削除は極力避けたいです。お力をお貸しください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim v As Range Dim r As Range If Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub On Error Resume Next Application.EnableEvents = False Set v = Intersect(Target.EntireRow, Range("A:A")) Application.EnableEvents = True On Error GoTo 0 If v Is Nothing Then Exit Sub For Each r In v If r.Value = "A" Or r.Value = "B" Then Application.EnableEvents = False Target.Offset(, 1).Select ' r.Offset(, 2).Select Application.EnableEvents = True Exit Sub End If Next If Target.Column <> 2 Or Target.Count > 1 Then Exit Sub If Target.Offset(, -1).Value = "A" Or _ Target.Offset(, -1).Value = "B" Then Application.EnableEvents = False Target.Offset(, 1).Select Application.EnableEvents = True End If End Sub こんな感じのコードも追加してみるとか。
その他の回答 (1)
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは そのシートのシートタブを右クリックし「コードの表示」でVBE画面を出して Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub If Target.Count > 1 Then Exit Sub If Target.Offset(, -1).Value = "A" Or _ Target.Offset(, -1).Value = "B" Then Application.EnableEvents = False Application.Undo Application.EnableEvents = True End If End Sub を貼り付けて試して下さい。
お礼
ushi2015様 早々のご返答ありがとうございます。 早速試させて頂きました。 「A」「B」が入力されている場合はコピペも含めてセルに文字を入力しても反映されなくなり、これでばっちりだと思ったのですが… 私の職場の人たちは贅沢で「セル自体が選択できないようにならないと、入力できると思って無駄な作業をする羽目になる」と言われてしまいました。 せっかくご回答頂いたのに申し訳ありません。 このコードは別の場面で活用させていただきたいと思います。 また私自身VBEは初心者ですので、このコードを参考に色々勉強したいと思います。 ありがとうございました。
お礼
ushi2015様 凄いです! これならみんな文句なく使ってくれると思います。 VBEってコードの使い方もですが、やりたいことを実現させるための手順を考えるセンスも重要なんですね。 凄く勉強になりました。 本当にどうもありがとうございました!!