こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2016-10-03 21:36:39

QNo.9237788

困ってます

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

こんにちは
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
こんな感じのコードも追加してみるとか。

投稿日時 - 2016-10-05 08:44:46

お礼

ushi2015様

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

投稿日時 - 2016-10-05 10:07:30

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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
を貼り付けて試して下さい。

投稿日時 - 2016-10-04 08:46:32

お礼

ushi2015様
早々のご返答ありがとうございます。
早速試させて頂きました。
「A」「B」が入力されている場合はコピペも含めてセルに文字を入力しても反映されなくなり、これでばっちりだと思ったのですが…
私の職場の人たちは贅沢で「セル自体が選択できないようにならないと、入力できると思って無駄な作業をする羽目になる」と言われてしまいました。

せっかくご回答頂いたのに申し訳ありません。
このコードは別の場面で活用させていただきたいと思います。
また私自身VBEは初心者ですので、このコードを参考に色々勉強したいと思います。
ありがとうございました。

投稿日時 - 2016-10-04 18:55:05

あなたにオススメの質問