プロが教えるわが家の防犯対策術!

エクセルで、1~3行目に行削除、行挿入のロックをかけ、それ以外は行の挿入、削除を許可させたいのですが、うまくいきません。1~3行目には入力欄があるため、1~3行目のすべてのセルにロックをかけることはできません。
マクロを使ってもいいのですが、これを何とか実現する方法はないでしょうか。
よろしくお願いいたします。

質問者からの補足コメント

  • うれしい

    すみません。あと一つ。3行目までのどこかのセルをクリックして、「保護の解除」ボタンを押すと、保護が解除できてしまうので、ボタンを押したときにパスワードを要求できるようにすることは可能でしょうか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/10/17 17:39
  • うれしい

    失礼しました。調べたところ、以下の記述でできました。
    ActiveSheet.Protect Password:="パスワード"

      補足日時:2016/10/17 17:44

A 回答 (3件)

>Password:="パスワード"



もう、おわかりになってしまいましたが、

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row < 4 Then
  Me.Protect "passward"
Else
  Me.Unprotect "passward"
End If
End Sub


ちょっと洒落た書き方を教えておきます。
標準モジュールを設けて、その一番上の1行目に

Public Const PWD = "mypassword"

シートモジュールには、直接書くかわりに、このように変数を置いてもよいです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row < 4 Then
  Me.Protect PWD
Else
  Me.Unprotect PWD
End If
End Sub

'//
VBAに詳しい人なら分かってはしまいますが、ちょっと覗いたぐらいでは、PWDが、どうして、"mypassword" か、気がつかないかもしれません。
    • good
    • 0
この回答へのお礼

よくわかりました。ご丁寧にありがとうございます。

お礼日時:2016/10/17 19:48

#1の回答者です。


ちょっと恥ずかしい書き方をしてしまいました。

  ActiveSheet.Protect
マクロの経験者としては、
 Me.Protect 'I,my,me の Me で、自分のシートという意味です。

と書くべきでした。そのままActivesheetでも、問題はありません。

このマクロの別な方法を、今年の9月の始めころから探し始めましたが、できるまでには、たぶん、1年以上は掛かりそうです。要するに、隠れている(コンテクチュアル)メニューを操作するということを考えていた最中に、今の方法を偶然に見つけました。私自身、なんとなくできることが不思議な気がします。
    • good
    • 0
この回答へのお礼

わざわざご回答ありがとうございました。

お礼日時:2016/10/17 17:47

こんにちは。



1行~3行までの間で、入力する場所には、あらかじめ、書式の保護[タブ]で、ロックを外しておいてください。

画面下のシート名を右クリックして、その画面に、以下のようなコードを貼り付けます。とりあえず、この方法で試してみてください。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row < 4 Then
  ActiveSheet.Protect
Else
  ActiveSheet.Unprotect
End If
End Sub

'//
まだ、他の方法も考えてはいるのですが、そちらの方は実現できていません。
この回答への補足あり
    • good
    • 1
この回答へのお礼

すばらしいです。3行目以上をクリックすると強制的にシートの保護になりました。非常に助かりました。また、当方には全く見たこともないコードでして、大変勉強になります。

お礼日時:2016/10/17 17:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A