[[20160126141903]] 『ロック解除のセルを選択した時に、保護を解除した』(にゃもたん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ロック解除のセルを選択した時に、保護を解除したい。』(にゃもたん)

はじめまして。
マクロ初心者です。
ご教授願います。

今作成している表について、多数人での入力・編集を行っていて
一部のセル以外はいじられないようにロックをかけて保護を
しています。

ところが、保護をかける→ロックを解除して、入力・編集
を許可しているセルについても、セルの結合・結合の解除が
できなくなってしまいます。

表は以下のとおりの作りになっています。

・ロックをかけているセルは、関数、ベタ打ち、さまざま。
・ロックをかけているセルにも結合セルがある。
・ロックをかけていない入力用のセルは飛び飛びである。(行・列指定は不可)

 以前の質問で、「A列が選択された時は保護を解除、それ以外のセルが
選択された時は保護を設定」というものがあったのですが、

https://www.excel.studio-kazu.jp/kw/20041005101917.htm

この応用で、A列ではなく「ロックがかかっているセルの選択は保護」
「ロック解除セル選択は保護解除」とすることはできないでしょうか?

その他、結合自体をマクロで実行する方法も知○袋にあったのですが、
そうすると、入力作業がややこしくなるので(編集メンバーには
お年寄りがいるので)、エクセル側で保護・解除を制御したいです。

よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:unknown >


 >>エクセル側で保護・解除を制御したいです。 

 とはいえ、この処理自体はマクロになりますけど、それでいいのですね。

(β) 2016/01/26(火) 14:55


言葉足らずですみません。
はい、入り口の所でマクロを有効にする、という事については
全員できますので、、、編集時にボタン等にマクロを登録して
操作する、というようなことにならなければ
大丈夫です。

(にゃもたん) 2016/01/26(火) 15:02


 >https://www.excel.studio-kazu.jp/kw/20041005101917.htm
 最後の「l」が抜けているようだ。

https://www.excel.studio-kazu.jp/kw/20041005101917.html
(ねむねむ) 2016/01/26(火) 15:06


あぁぁ…すみませんん T_T)

おっしゃるとおりです。

ねむねむさんご指摘ありがとうございます

あらためてご指導願います。

ロックセルを選択→シート保護
ロック解除セルを選択→シート保護解除

が、実行できないでしょうか?

https://www.excel.studio-kazu.jp/kw/20041005101917.html
やりたいことは↑と同じで、条件をA列ではなく「ロック解除セル」に
変えたいです。

よろしくお願いします。

(にゃもたん) 2016/01/26(火) 15:24


 セル選択は範囲を選択できるがロックされたセルとロックされていないセルの両方をまとめて選択された場合はどうするのか?

 一つのセルだけが選択された場合だけ実行させるのか?
 セル範囲の左上のセルのロックで判断させるのか?
 なにかそれ以外で判断させるのか?

(ねむねむ) 2016/01/26(火) 15:34



ねむねむさん、ありがとうございます。

そうでした!!

範囲選択された場合、
「選択範囲に、ロックされたセルが1つでも含まれていた場合→保護実行」
とすることができたらありがたいです。。

もし、そのような条件づけができない場合、
「範囲内のアクティブセルで判別」とかで…

範囲選択されることは(ロックにもアンロックにも、もともと結合している
セルがあるので)確実なので、1つのセルだけが選択された場合のみの
実行ではなく、1つでも、複数でも実行できるようにしたいです。。。。

(にゃもたん) 2016/01/26(火) 15:50


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cl As Range
Dim flg As Boolean
    For Each cl In Target
        If cl.Locked Then
         flg = True: ActiveSheet.Protect: Exit Sub
        End If
    Next cl
    ActiveSheet.Unprotect
End Sub
(mm) 2016/01/26(火) 17:16

 領域内セル群のプロパティによっては、その値を取得した際に、各セルすべて同じならその値、異なるものが混在していれば Null値が返るものがあります。

 セル領域.Locked も、そういったプロパティです。

 ですから、

 選択領域がすべてFalse なら UnProtect、すべて True あるいは False と True が混在なら Protect という処理なら
 以下のように ループなしのコードでも。

 なお、シート.Protect ですが、これだけだと、ユーザーに許可する操作が保護されたセルの選択と保護されていないセルの選択のみになります。
 もし、いろいろと許可する操作にチェックをつけて保護しているなら、コード内の Protectメソッドの引数として
 各条件をすべてセットするか、あるいは、シートに設定された保護条件を継承するコードにしなければいけません。

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Selection.Locked = False Then
        Unprotect
    Else
        Protect
    End If
 End Sub

(β) 2016/01/26(火) 18:31


できました!!
mmさん、βさん、どうもありがとうございます。

どちらの方法でもできました!

ありがとうございます。

ものすごく遅くなってしまってすみません。
すぐお礼の返事をしたつもりだったのですが、
嬉しくてすぐさま作業に入ろうと、、、
プレビューを押して送信したつもりになって
更新されなかったみたいです…

まだ見てくれていらっしゃるでしょうか
本当に、聞くだけ聞いて結果とお礼が
こんなに遅くなってしまい…申し訳ありません。

ねむねむさんも、言葉足らずのわたしの質問を
補完する質問をしてくださり、
ほんとうにありがとうございました。

本当に本当に助かりました。
色々なファイルに使わせていただいてます。

感謝の気持ちがお3方に届きますように
1か月も…(TT)ゴメンナサイ

本当にありがとうございました。

(にゃもたん) 2016/03/08(火) 17:07


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.