- ベストアンサー
エクセルで特定のセルへの直接入力だけを禁止したいんです。
過去の質問を参考に『セルをダブルクリックすると"○"と入力される』というマクロを○⇒●⇒-⇒ ⇒○⇒・・・として使っているんですが、ダブルクリックの度にセルが直接入力の状態(縦の棒の点滅)になってしまい、一度他のセルをクリックしないと次へ進めずに困っています。 良い方法ってあるのでしょうか? ちなみに使用しているマクロは 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 というものです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
End If と End If の間に、 Target.Offset(, 1).Select とか、 Cancel = True SendKeys ("{ENTER}") と書き加えて見てください。
その他の回答 (3)
- kobouzu_su
- ベストアンサー率45% (24/53)
こんにちは。 既に回答は出ていますが、今回のような場合は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 '--------------------------------------------- 以上です。
お礼
ありがとうございました。 勉強になりました。
- k-f3
- ベストアンサー率31% (945/3036)
マクロを使わずにこの方法でもできます! (1)全セルを入力OKに設定する。 全セルを範囲指定→書式→保護→「ロック」のチェックを外し→OK (2)直接入力だけを禁止したいセルを範囲指定→書式→保護→「ロック」にチェックを入れる→OK・・・2箇所意所の場合は設定を繰り返す。 (3)ツール→保護→シートの保護→OK 上記で設定で、(2)の部分のセルをクリックしても、入力禁止のエラーが発生し入力できない。 指定セルの、入力禁止・計算式やマクロの解除を禁止できる。
お礼
私のやり方が間違っているのか、この方法だとダブルクリックまでロックされてしまいました。 回答、ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 こんな感じにしてください。 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
お礼
とても丁寧に答えていただき、感謝しています。 これをそのまま使わせていただきます。 ありがとうございました。
お礼
すばやい回答、ありがとうございました。 参考にさせてもらいます。