• ベストアンサー

EXCELで条件によってセルをロックする方法

A列に入力規制を使用して「A」「B」「C」のみ入力できるように設定してあります。 現在B列には、A列が「A」または「B」の場合は入力不可、「C」の場合は自由に入力できるような入力規制を掛けていますが、どうしても前後のデータをコピペしてしまう人が出てきてしまって困っています。 A列によってB列にロック(選択自体できなくする)するような都合の良い方法はないでしょうか? なお、このシートには関数や計算式、他のシートへのリンク等がかなり使用されているので、列や行の追加・削除は極力避けたいです。お力をお貸しください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.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 こんな感じのコードも追加してみるとか。

genee
質問者

お礼

ushi2015様 凄いです! これならみんな文句なく使ってくれると思います。 VBEってコードの使い方もですが、やりたいことを実現させるための手順を考えるセンスも重要なんですね。 凄く勉強になりました。 本当にどうもありがとうございました!!

その他の回答 (1)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは そのシートのシートタブを右クリックし「コードの表示」で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 を貼り付けて試して下さい。

genee
質問者

お礼

ushi2015様 早々のご返答ありがとうございます。 早速試させて頂きました。 「A」「B」が入力されている場合はコピペも含めてセルに文字を入力しても反映されなくなり、これでばっちりだと思ったのですが… 私の職場の人たちは贅沢で「セル自体が選択できないようにならないと、入力できると思って無駄な作業をする羽目になる」と言われてしまいました。 せっかくご回答頂いたのに申し訳ありません。 このコードは別の場面で活用させていただきたいと思います。 また私自身VBEは初心者ですので、このコードを参考に色々勉強したいと思います。 ありがとうございました。

関連するQ&A