セルロック

セルとワークシートに、ロックをかけることができます。プロパティは以下の通りです。

  • Cell.IsLocked
  • Worksheet.IsLocked

優先度について

セルとワークシート両方にロックをかけた場合、セルのプロパティの優先度が高いです。 この優先度を活用することによって、ワークシートの一部をロック、または一部をロックしないように設定できます。

例えば、C5以外のセルを全部ロックしたい場合

sheet.IsLocked = true;
sheet.Cells["C5"].IsLocked = CellLock.UnLocked;

またはC5のみをロックしたい場合

sheet.IsLocked = false;
sheet.Cells["C5"].IsLocked = CellLock.Locked;

ロック状態の指定

CellLock Enumは3つの値があります。

  • CellLock.Locked セルをロックする
  • CellLock.UnLocked セルをアンロックする
  • CellLock.Inherit セルのロック状態は Worksheet.IsLocked による決める(デフォルト値)

複数セルの一括指定

Ranges プロパティを利用してセルの一括指定もできます。

sheet.Ranges["A1:C3"].IsLocked = CellLock.Locked;

ただしこの方法はロック状態の設定のみ(読み取り専用)のプロパティです。

ロックしたセルの挙動について

セルがロックされる場合、該当セルの選択、編集(ドロップダウンを含む)、Clipboardのペストができなくなります。 編集中のセルをロックした場合、編集モードが自動的に終了します。

選択範囲について

選択範囲中のセルがロックされた場合、選択範囲が自動的に次のロックしていないセルに移動します。 強制に移動範囲を次のセルに移動したい場合、以下のAPIを利用できます。

sheet.MoveSelectionRangeToUnlockedCell();

ドラッグドロップによる値の移動・複製について

特例として、セルをロックしてもマウスのドラッグドロップによるセル値の移動・複製はできるため、以下の設定でドラッグドロップ機能を無効化します。

sheet.DisableSettings(WorksheetSettings.Edit_DragSelectionToFillSerial 
    | WorksheetSettings.Edit_DragSelectionToMoveCells);