チームコラボレーションやデータのやり取りがますます頻繁になる昨今、Excel ドキュメント内の重要なデータ(数式、ヘッダー、基本パラメーターなど)を、意図しない変更や不正な編集から保護することは、データの整合性を確保するための基本的な要件となっています。
本記事では、Free Spire.XLS for .NET ライブラリを使用して、C# で Excel ワークシートの特定のセル、行、または列を正確にロックする方法を体系的に紹介し、ワークシートの保護と権限設定に関する詳細な解説も行います。
1. ライブラリの選択とインストール
1.1 無料ライブラリのインストール
Free Spire.XLS for .NET は、Microsoft Office をインストールしなくても Excel ドキュメントの作成、読み取り、変更、保護ができる、完全無料の Excel 操作用コンポーネントです。NuGet パッケージマネージャーからのインストールを推奨します。
Visual Studio で「パッケージマネージャーコンソール」を開き、以下を実行します:
Install-Package FreeSpire.XLS
または .NET CLI を使用:
dotnet add package FreeSpire.XLS
1.2 他の .NET Excel ライブラリとの比較
| ライブラリ | ライセンス | Excelのインストール有無 | セルの書式/スタイル | ワークシート保護とパスワード | 特定セルのロック |
|---|---|---|---|---|---|
| Free Spire.XLS for .NET | 完全無料(制限あり) | ❌ 不要 | ✅ 全面的にサポート | ✅ 完全サポート | ✅ 正確にロック |
| EPPlus(コミュニティ版) | 非商用は無料、商用は要ライセンス | ❌ 不要 | ✅ 豊富 | ✅ サポート | ✅ サポート |
| NPOI | Apache 2.0 無料 | ❌ 不要 | ✅ 基本サポート | ⚠️ 一部サポート | ⚠️ 複雑 |
| Microsoft.Office.Interop.Excel | Office ライセンス要 | ✅ 必須 | ✅ 完全 | ✅ サポート | ✅ サポート |
各ライブラリに一長一短があります。セルの正確なロックと堅牢な保護機能を求めるなら、Free Spire.XLS は直感的な API を提供し、Excel のインストールが不要です。
2. セルロックの核心的な仕組み
Excel のセルロック機構の流れは、次のようにまとめられます:
1️⃣ デフォルト状態:すべてのセルの Style.Locked = true(ただし保護が有効でないと効果なし)
2️⃣ シート全体のロック解除:sheet.Range.Style.Locked = false
3️⃣ 特定範囲をロック:sheet.Range["A1:C5"].Style.Locked = true
4️⃣ 保護の有効化:sheet.Protect(password, SheetProtectionType.All)
重要なポイント:
Excel ワークシートの全セルはデフォルトでLocked = trueですが、このプロパティはワークシート保護が有効になった後でなければ編集制限として機能しません。
したがって、正しいロック手順は 「シート全体をロック解除 → 部分ロック → 保護有効化」 です。
3. 基本例:特定セルをロックする
以下のコードは、単一セルと範囲をロックし、パスワード保護を設定する例です。
using Spire.Xls;
class Program
{
static void Main(string[] args)
{
// 1. ワークブックを読み込む
Workbook workbook = new Workbook();
workbook.LoadFromFile("input.xlsx");
// 2. 最初のワークシートを取得
Worksheet sheet = workbook.Worksheets[0];
// 3. ワークシート内のすべてのセルのロックを解除
sheet.Range.Style.Locked = false;
// 4. セル A2 をロック
sheet.Range["A2"].Style.Locked = true;
// 範囲 C3:E9 をロック
sheet.Range["C3:E9"].Style.Locked = true;
// 5. ワークシート保護を有効にし、パスワード "123456" を設定
sheet.Protect("123456", SheetProtectionType.All);
// 6. ファイルを保存
workbook.SaveToFile("Locked.xlsx", ExcelVersion.Version2016);
workbook.Dispose();
}
}
実行後、A2 セルおよび C3:E10 範囲の内容は、保護解除またはパスワード入力がない限り編集できなくなります。

4. 応用編:行全体または列全体をロックする
業務シーンでは、タイトル行(例:1行目)や数式列(例:C列)をロックする必要がよくあります。
using Spire.Xls;
Workbook workbook = new Workbook();
workbook.LoadFromFile("input.xlsx");
Worksheet sheet = workbook.Worksheets[0];
// すべてのセルのロックを解除
sheet.Range.Style.Locked = false;
// 1 行目をロック(行番号は1から始まるが、Rowsコレクションのインデックスは0から始まるため、Rows[0]が1行目に対応)
sheet.Rows[0].Style.Locked = true;
// 3 列目(C列)をロック(列インデックスは0から始まり、C列はインデックス2)
sheet.Columns[2].Style.Locked = true;
sheet.Protect("password", SheetProtectionType.All);
workbook.SaveToFile("行列入力.xlsx", ExcelVersion.Version2013);
workbook.Dispose();
注意:Rows および Columns コレクションのインデックスは 0 から始まります。そのため Rows[0] は Excel の 1 行目、Columns[2] は C 列に対応します。
5. 高度な保護オプション
5.1 SheetProtectionType を使った細かい権限制御
SheetProtectionType 列挙型は、保護されたワークシートでユーザーに許可する操作を決定します。ビットごとの組み合わせにより柔軟な権限付与が可能です。
// 並べ替えとフィルターを許可するが、内容と構造の変更は禁止
sheet.Protect("password",
SheetProtectionType.Sorting | SheetProtectionType.Filtering);
主な列挙値の意味:
| 列挙値 | 説明 |
|---|---|
SheetProtectionType.Content |
セルの内容のみ保護 |
SheetProtectionType.FormattingCells |
セルの書式設定を許可 |
SheetProtectionType.FormattingColumns |
列の書式設定を許可 |
SheetProtectionType.FormattingRows |
行の書式設定を許可 |
SheetProtectionType.InsertingRows |
行の挿入を許可 |
SheetProtectionType.DeletingRows |
行の削除を許可 |
SheetProtectionType.Sorting |
並べ替えを許可 |
SheetProtectionType.Filtering |
フィルターを許可 |
SheetProtectionType.UsingPivotTables |
ピボットテーブルの使用を許可 |
SheetProtectionType.All |
すべての保護オプションを有効(デフォルト) |
SheetProtectionType.None |
すべての操作を禁止 |
完全な API リファレンスは公式ドキュメントをご参照ください。
5.2 編集を許可する範囲(AllowEditRange)の作成
ワークシート保護を有効にしても、特定のユーザー向けに編集可能な範囲を事前に設定できます。
// "InputRange" という名前の編集可能範囲を追加(セル B1 に対応)
sheet.AddAllowEditRange("InputRange", sheet.Range["B1"]);
// その後、通常通りワークシートを保護
sheet.Protect("password", SheetProtectionType.All);
これにより、ユーザーは保護されたワークシート内で B1 セルをパスワードなしで編集できます。
📚 6. 拡張:ファイル単位の暗号化と変更権限
ワークシート保護に加えて、Free Spire.XLS for .NET はさらに高いレベルのドキュメントセキュリティもサポートします。
6.1 ドキュメントオープンパスワードの設定
workbook.Protect("openPassword");
6.2 変更権限パスワードの設定
workbook.SetWriteProtectionPassword("modifyPassword");
6.3 最終版としてマーク
カスタムプロパティを追加して、このドキュメントが最終版であることをユーザーに通知します。
workbook.CustomDocumentProperties.Add("_MarkAsFinal", true);
本記事の詳細な説明とコード例を通じて、開発者は C# プロジェクトにおいて Free Spire.XLS for .NET を活用し、Excel のセル保護をきめ細かく実装できるようになるはずです。このライブラリは無料でありながら、日常的な Office オートメーションに十分な機能を提供しており、Excel のセキュリティ要件に対処する信頼できる選択肢の一つです。ドキュメントのロック解除やその他の豊富な Excel 操作機能については、完全なサンプルチュートリアルをご参照ください。