• ベストアンサー

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

過去の質問を参考に『セルをダブルクリックすると"○"と入力される』というマクロを○⇒●⇒-⇒  ⇒○⇒・・・として使っているんですが、ダブルクリックの度にセルが直接入力の状態(縦の棒の点滅)になってしまい、一度他のセルをクリックしないと次へ進めずに困っています。 良い方法ってあるのでしょうか? ちなみに使用しているマクロは 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
質問者

お礼

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

関連するQ&A

  • エクセル ダブルクリックで処理日の入力

    お世話になります。 先般、お教え頂きました別のダブルクリックイベントプロシージャと 下記の当日の日付を入力するという処理を同じシート上で行いたいのですが、VBエディターにどのように記述したら良いかわかりません。 当方、かなりの初心者です。 よろしくご教授くださいませ。 【新しく加えたい処理】 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("b4:C999")) Is Nothing Then Exit Sub If ActiveCell = "" Then ActiveCell = Date Cancel = True End If End Sub 【もともと使っている処理】 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("h1:h999")) Is Nothing Then With Target If .Value = "" Then .Value = "有" ElseIf .Value = "有" Then .Value = "無" ElseIf .Value = "無" Then .Value = "" End If End With ElseIf Not Intersect(Target, Range("i1:i999")) Is Nothing Then With Target If .Value = "" Then .Value = "要" ElseIf .Value = "要" Then .Value = "不要" ElseIf .Value = "不要" Then .Value = "" End If End With End If End Sub よろしくお願いします。

  • エクセルでセルをクリックすると“○”と入力したい。

    VBA”超”初心者です。 理屈抜きにして結果だけ教えていただきたいことがございます。 課題である表記を実現するために、 ワークシートエリアに以下を記しました (サイトからコピーしてきただけですが。。) 同時に同じワークシート内において、 "R18:R103" においても'処理対象としたいのですが、 どう改造すればよいでしょうか? (追伸)それと、シングルクリックバージョンも検討したいのです。よろしくお願いします。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "O18:O103" '処理対象のセル範囲 If Not Application.Intersect(Target, Range(rng)) Is Nothing Then If Target.Value = "" Then Target.Value = "○" Else Target.ClearContents End If End If End Sub

  • excel マクロでの特殊文字入力方法

    マクロで特殊文字入力は出来ないのでしょうか? やりたい内容は、セルをダブルクリックした時に✓を表示させたいのです。 セルをダブルクリックした時に○を表示するマクロが、下記の通りである時、 ○の代わりに✓を表示させたいのですが、VBAで○の所に✓で書き換えると ?と表示されてしまいます。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) With Target If .Value = "○" Then .Value = "" Else .Value = "○" End If End With End Sub

  • 型が一致しません

    特定のセルでダブルクリックすると「〇」が入り,再度ダブルクリックすると「〇」が消えるコードを調べ,以下のものです。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "A1:B3" '処理対象のセル範囲 If Not Application.Intersect(Target, Range(rng)) Is Nothing Then If Target.Value = "" Then Target.Value = "○" Else Target.ClearContents End If End If End Sub 試してみましたが,「実行時エラー13 型が一致しません」というものが出て,デバックというところをクリックすると,If Target.Value = "" Thenのところが黄色くなり矢印が出ていたのでここが問題かなと思うのですが,どのように修正すればいいのか分かりません。教えていただけると助かります。

  • Excelのマクロで、IFを複数セルに指定するには

    セルA1、B1、C1をダブルクリックすると各セルの値が+1ずつ増える Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$A$1" Then Target.Value = Target.Value + 1: Cancel = True If Target.Address = "$B$1" Then Target.Value = Target.Value + 1: Cancel = True If Target.Address = "$C$1" Then Target.Value = Target.Value + 1: Cancel = True End Sub というマクロを使用致しておりますが、これに追加で セルA1をダブルクリックした時に、A1と同時にセルC1も+1増やせる 方法があれば教えて頂けると幸いです。 宜しくお願い致します。

  • 値を変更後にセルがアクティブ状態に

    セルをダブルクリックして値を変えるマクロを作ったのですが 値を変更後にセルがアクティブ状態になってしまいます。 エンターを押したり他のセルをクリックすれば通常通りになるのですが、 VBAでも通常通りに戻すにはどうすればいいでしょうか? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim mystr As String mystr = Target.Value If mystr = "Yes" Then Target.Value = "No" ElseIf mystr = "No" Then Target.Value = "Yes" End If End Sub を実行すると、 セルをクリックしてF2を押した時のような状態になってしまいます。 コードの最後に Target.Cells.Select を入れてみましたが、変わりませんでした。 スクショを撮ってみたのですが、カーソル?棒?が映りませんでした。

  • エクセル マクロ ダブルクリックで…(2)

    たびたび申し訳ございません。 先ほどエクセルでダブルクリックをすると順番に該当セル内の値が「有」→「無」→「空白」 となるマクロをご教授頂き、下記の内容で解決した者です。 B列についての該当セルへの入力がなされるという内容だったのですが、実はC列にも同様の処理を致したく、またもや素人はなすすべが無くなってしまいました。 B列は「要」「不要」「請求」「空白」としたいと思います。 たびたび大変恐縮ですがよろしくご教授くださいませ。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("d1:d999")) Is Nothing Then Exit Sub With Target   If .Value = "" Then    .Value = "有"   ElseIf .Value = "有" Then    .Value = "無"   ElseIf .Value = "無" Then    .Value = ""   End If End With End Sub

  • エクセル ダブルクリック マクロについてご教授下さい

    よろしくお願い致します。 すみません、マクロの超初心者です。 見よう見まねで組んでみたのですが、セルが選択されるばかりでさっぱり動きません。 同じような処理で多数のパターンを覚えたいのですが、お教え頂けますでしょうか。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("d1:d999")) Is Nothing Then Exit Sub With Selection.Interior If ActiveCell = "" Then .Value = "有" ElseIf .Value Like "有*" Then .Value = "無" Else Cancel = True End If End With End Sub やりたい処理は、セルをダブルクリックするごとに該当文字が順に出たのち、また空白に戻る、というものです。 恥ずかしいのですが、すべてコピペしたので、どこがどう間違っているのかもご指摘頂けると幸いです。 不勉強で申し訳ございません。お助け下さい。 よろしくお願い致します。

  • エクセルVBA ダブルクリックした左隣の値を返す方法

    いつもお世話になっております。 あるワークシートにおいて、 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) If ActiveCell.Column = 7 Then Target.Value = "希望" End If End Sub というマクロを記述することができました。 今度は、 G列のどこかのセルをダブルクリックすると、 同じ行のE列の値が、 ダブルクリックしたセルに入るようにしたいのです。 どのような記述をすればよいのか ご教示ください。

  • エクセル VBA について

    エクセルで、 ダブルクリックしたら"*"を表示したい範囲に【入力】という名前をつけ、 ダブルクリックしたら9つ左のセルの内容を表示したい範囲に【金額】という名前をつけ、 二つの構文?をVisual Basicに作成したんですが、エラーが出てしまいます。 ひとつずつだと上手くいくのですが、なぜでしょうか? わかる方教えてください。 あと申し訳ないのですが、VBAはまったくわからないため、ネット上で構文をコピーして貼り付けました。 そんな者でもわかる修正の説明をお願いいたします。 以下が作成し、エラーとなってしまう構文です。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const RangeName As String = "金額" If Target.Value = "" Then Target.Value = Target.Offset(0, -9).Value Cancel = True End If End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const RangeName As String = "入力" If Not Intersect(Range(RangeName), Target) Is Nothing Then Cancel = True If Target = "*" Then Target = "" Else Target = "*" End If End If End Sub

専門家に質問してみよう