• ベストアンサー

エクセルで特定のセルへの直接入力だけを禁止したいんです。

過去の質問を参考に『セルをダブルクリックすると"○"と入力される』というマクロを○⇒●⇒-⇒  ⇒○⇒・・・として使っているんですが、ダブルクリックの度にセルが直接入力の状態(縦の棒の点滅)になってしまい、一度他のセルをクリックしないと次へ進めずに困っています。 良い方法ってあるのでしょうか? ちなみに使用しているマクロは Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "A1:A3" '処理対象のセル範囲 If Not Application.Intersect(Target, Range(rng)) Is Nothing Then If Target.Value = "" Then Target.Value = "○" ElseIf Target.Value = "○" Then Target.Value = "●" ElseIf Target.Value = "●" Then Target.Value = "-" Else Target.ClearContents End If End If End Sub というものです。 よろしくお願いします。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

End If と End If の間に、 Target.Offset(, 1).Select とか、 Cancel = True SendKeys ("{ENTER}") と書き加えて見てください。

take4-1
質問者

お礼

すばやい回答、ありがとうございました。 参考にさせてもらいます。

その他の回答 (3)

回答No.4

こんにちは。 既に回答は出ていますが、今回のような場合はSelect文を使ったほうが見やすいかもそう。。。 '------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  Const rng As String = "A1:A3"  If Application.Intersect(Target, Range(rng)) Is Nothing Then Exit Sub  Cancel = True '▲▲▲ これで編集モード解除になる  Select Case Target.Value    Case ""      Target.Value = "○"    Case "○"      Target.Value = "●"    Case "●"      Target.Value = "-"    Case Else      Target.ClearContents  End Select End Sub '--------------------------------------------- 以上です。  

take4-1
質問者

お礼

ありがとうございました。 勉強になりました。

  • k-f3
  • ベストアンサー率31% (945/3036)
回答No.3

マクロを使わずにこの方法でもできます! (1)全セルを入力OKに設定する。 全セルを範囲指定→書式→保護→「ロック」のチェックを外し→OK (2)直接入力だけを禁止したいセルを範囲指定→書式→保護→「ロック」にチェックを入れる→OK・・・2箇所意所の場合は設定を繰り返す。 (3)ツール→保護→シートの保護→OK 上記で設定で、(2)の部分のセルをクリックしても、入力禁止のエラーが発生し入力できない。 指定セルの、入力禁止・計算式やマクロの解除を禁止できる。

take4-1
質問者

お礼

私のやり方が間違っているのか、この方法だとダブルクリックまでロックされてしまいました。 回答、ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 こんな感じにしてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "A1:A3" '処理対象のセル範囲 If Application.Intersect(Target, Range(rng)) Is Nothing Then Exit Sub   If Target.Value = "" Then     Target.Value = "○"   ElseIf Target.Value = "○" Then     Target.Value = "●"   ElseIf Target.Value = "●" Then     Target.Value = "-"   Else     Target.ClearContents   End If     Cancel = True  'ここに入れます。 End Sub

take4-1
質問者

お礼

とても丁寧に答えていただき、感謝しています。 これをそのまま使わせていただきます。 ありがとうございました。