• ベストアンサー

セルの書式の変更を特定のセル範囲だけに限定

エクセルでワークシートの保護をするときに、すべてのユーザーに許可する項目を選べるのは存じています。セルの書式もその一つです。 ただ、そうした場合、シート全体に対して書式設定の変更が可能になってしまします。 質問は、セルの書式の変更をある一定のセル範囲だけに限定できないかということです。ご教示ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1715/2585)
回答No.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

emaxemax
質問者

お礼

なーるほど! 何て柔軟な発想でしょ。 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 でできました!

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

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) といったイベントで 必要なセル範囲の書式をかぶせる制御をします。

emaxemax
質問者

お礼

ありがとうございます。 そうなんです。書式を変更したときのイベントが無いので困りものです。 御教示の方法で考えてみます。

すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (364/1803)
回答No.2

入力されているデータ内容変更の適用範囲の限定は可能だけど、[セルの書式]の限定は駄目よダメダメのようです。(Excel 2013)

emaxemax
質問者

お礼

ありがとうございました。 やはりダメヨダメダメ!ですか・・・。 セルの書式を変えられたことを検知してVBAでやろうかとも思いましたが難しそうですね。

すると、全ての回答が全文表示されます。
回答No.1

  変更を許したいセルで書式設定の中の「保護」にある「ロック」を外す 変更を許可したいセル全てを同様に保護のロックを外す 次にシート全体を保護する こうすれば保護のロックが外れてるセルは自由に変更できますが、それ以外は変更できなくなります  

emaxemax
質問者

お礼

早速ありがとうございます。 いえいえ、ロックを解除してないセルもワークシートの保護をするときに、すべてのユーザーに許可する項目でセルの書式を選ぶと書式変更ができてしまします。もちろんロック解除してないので入力はできませんが。

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう