[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セルのロックを複数作りたい』(gyomu)
エクセルで複数のセルに文字を入力後、そこが編集できないように
ロックをかけたいです。
シート全体で保護するのではなく、
行ごとにロックをかけたいです。
イメージとしては、複数のセルに情報を入れ、
それらをロックさせる確定チェックボックスにチェックをいれたら、
それらのセルはロックされて変更できないようになる。
再度変更する場合には、チェックを外してから編集するようなイメージです。
情報を入力するセルが3つ、その横にチェックボックスがあるという行を
ずらーっと複数作りたいです。
一行だけに対してロックするならネットで見つけることが
出来たのですが、
1つのシートにそれを複数作るやり方が見当たりませんでした。
説明べたで、申し訳ございませんが、
お分かりになる方いらっしゃいましたら、
お教えいただければと思います。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
セルのロックは、セル1つずつ個別に設定できますよ。
上手く行かない場合は、どのように操作してうまくいかなかったのか、教えて下さい。
(もこな2) 2018/02/19(月) 15:05
「シートの保護」とセルの「ロック」は別物です。
シートの保護を実行(有効)にすると、「ロック」されたセルは編集できなくなります。
逆に言うと、「ロック」されてないセルは編集可能です。
また、シート保護が有効な状態で、「ロック」されたセル、「ロック」されてないセルのそれぞれが、「選択」できるのかは、シート保護を実行(有効)にするときのメニューで選択します。
ここで、「ロックされていないセル範囲の選択」にチェックを入れておかないと、論理的に編集は可能ですけど、「選択」できないから、実質的にはユーザーは編集不能になります。(マクロから書き込むのであればできる・・・かも。もっとも、マクロからの書込は、シートの保護を無視して書き込むという設定で保護することが可能です)
なので、マクロを使えば、チェックボックスが入ったときに、任意セルのロック状態を操作するといった記述をすればできるかもしれません。
(もこな2) 2018/02/19(月) 15:22
保護とロックは異なることは、わかるのですが。
すみません、エクセル用語でいう保護とかロックではありませんでした。
一部のセルを編集不可にしたり、
戻すようにするチェックボックスを作りたいという感じです。
(gyomu) 2018/02/19(月) 15:46
そして、以下のコードを標準モジュールに貼っておいてください。
Sub チェック1_Click() Dim C As Object
ActiveSheet.Unprotect For Each C In ActiveSheet.Shapes If C.Name Like "Check Box*" Then C.TopLeftCell.Locked = (ActiveSheet.CheckBoxes(C.Name).Value = 1) End If Next C ActiveSheet.Protect End Sub (???) 2018/02/19(月) 16:24
VBAがおわかりになるのであればですけど・・・
(1)ActiveXコントロールのチェックボックスをシートに配置
(2)作ったチェックボックスを右クリック
(3)コードの表示でシートモジュールが開くので↓みたいな感じで記述
Private Sub CheckBox1_Click()
'シートを保護せよ(ただし、マクロからの操作は自由にせよ) Protect UserInterfaceOnly:=True
'A1セルのロックを、チェックボックスのチェックと同じにせよ '(つまり、チェックボックスにチェックが入ったら、A1はロックされる。外れればその逆。) Range("A1").Locked = CheckBox1.Value End Sub こんな感じでいけるかとおもいますが・・・ (もこな2) 2018/02/19(月) 16:27
(1)標準モジュールに以下を記述する。
Sub Sample2()
'==変数の宣言とか
Dim obj As Object
'==主処理
With ActiveSheet 'シートを保護せよ(ただし、マクロからの操作は自由にせよ) .Protect UserInterfaceOnly:=True
'変数「obj」にクリックしたチェックボックスをセットせよ Set obj = .CheckBoxes(Application.Caller)
'クリックしたチェックボックスの左上が属するセルのロック状態を 'クリックしたチェックボックスのチェック状態に合わせよ If obj.Value = 1 Then obj.TopLeftCell.Locked = True Else obj.TopLeftCell.Locked = False End If End With
'==後処理
Set obj = Nothing End Sub
(2)フォームコントロールのチェックボックスを必要なだけシートに配置して、すべてに上記のマクロを登録する。(???さんのアイデアのようにセルごとコピペでもok)
obj.Valueが論理値を返してくれないっぽくて悩みましたけど(というか使ってる定数がちがうのですかね?)、強引にIFで処理してみました(^^;)
(もこな2) 2018/02/19(月) 17:21
簡単に考えてました。
VBAがわからなく、ご教授いただいたやり方が
再現できませんでした。
せっかくご返答いただいたところ、
大変申し訳ございません。
こんな不躾な質問にご返答いただける
お気持ちに大変感謝と感動しました。
ありがとうございます。
少し勉強してみようかという気持ちになりました。
また何かあればご相談させていただきます。
(gyomu) 2018/02/20(火) 11:14
一度やってしまえば、簡単だということが判ると思いますので、試してみてください。
(???) 2018/02/20(火) 11:31
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.