- ベストアンサー
セルの書式の変更を特定のセル範囲だけに限定
エクセルでワークシートの保護をするときに、すべてのユーザーに許可する項目を選べるのは存じています。セルの書式もその一つです。 ただ、そうした場合、シート全体に対して書式設定の変更が可能になってしまします。 質問は、セルの書式の変更をある一定のセル範囲だけに限定できないかということです。ご教示ください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
一定のセル範囲を選択したときだけ保護を解除しそれ以外を選択したら保護するするようにすればいかがでしょう。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Range("A1:C5"), Target) Is Nothing Then ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Else ActiveSheet.Unprotect End If End Sub
その他の回答 (3)
- HohoPapa
- ベストアンサー率65% (455/693)
VBAには、 書式を変更したときのイベントが無いので 書き換わったことを検知するのが困難ですし 複数セルを選択して変更することができるほか 背景色や文字フォントなど、書式の情報が多様なので 手強い要求と思われます。 私だったら、 入力用のシートと書式を変更されたくないシートとに分け オペレータの方には入力用シートを使ってもらうことを考えます。 あるいは、 書式だけを格納したシート(書式保持原本シート)を用意し Private Sub Worksheet_Change(ByVal Target As Range) Private Sub Worksheet_SelectionChange(ByVal Target As Range) Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) といったイベントで 必要なセル範囲の書式をかぶせる制御をします。
お礼
ありがとうございます。 そうなんです。書式を変更したときのイベントが無いので困りものです。 御教示の方法で考えてみます。
- msMike
- ベストアンサー率20% (364/1804)
入力されているデータ内容変更の適用範囲の限定は可能だけど、[セルの書式]の限定は駄目よダメダメのようです。(Excel 2013)
お礼
ありがとうございました。 やはりダメヨダメダメ!ですか・・・。 セルの書式を変えられたことを検知してVBAでやろうかとも思いましたが難しそうですね。
- 中京区 桑原町(@l4330)
- ベストアンサー率22% (4373/19606)
変更を許したいセルで書式設定の中の「保護」にある「ロック」を外す 変更を許可したいセル全てを同様に保護のロックを外す 次にシート全体を保護する こうすれば保護のロックが外れてるセルは自由に変更できますが、それ以外は変更できなくなります
お礼
早速ありがとうございます。 いえいえ、ロックを解除してないセルもワークシートの保護をするときに、すべてのユーザーに許可する項目でセルの書式を選ぶと書式変更ができてしまします。もちろんロック解除してないので入力はできませんが。
お礼
なーるほど! 何て柔軟な発想でしょ。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Range("A1:C5"), Target(Target.Count)) Is Nothing Then Me.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Else Me.Protect AllowFormattingCells:=True End If End Sub でできました!