黙々とC#

"In a mad world of VBA, only the mad are sane" 『VBAという名の狂った世界で狂っているというのなら私の気は確かだ』


セルのクリア

本記事は、Excel C# Script入門講座の1記事です。

セルのクリア

Rangeオブジェクトには「セルに含まれる情報をクリアするための」メソッドが目的に応じ各種用意されています。

メソッド名 概要
Clear 全ての情報(数式と書式設定、コメント)を削除します。なお、グループ化は解除されません。
ClearComments コメントを削除します。
ClearContents 数式を削除します。書式設定は残ります。
ClearFormats 書式設定を削除します。数式は残ります。
ClearHyperlinks ハイパーリンクだけを削除します。セルのその他の内容 (テキストなど) や書式設定には影響しません。
ClearNotes コメントを削除します。ClearCommentsメソッドと同じ振る舞いをします。
ClearOutline 指定範囲にかかるアウトラインを削除(グループ化を解除)します。

サンプルコード

var activeSheet = Excel.ActiveWorkbook.ActiveSheet;
//アクティブなシートのセルB1~D3の範囲の全てを削除
activeSheet.Range(Cells(1,2),Cells(3,4)).Clear();
//アクティブなシートのセルB1~D3の範囲の数式、文字列をクリア
activeSheet.Range("B1:D3").ClearContents();

var sheet1 = Excel.Worksheets("Sheet1");
//Sheet1のセルB1~D3の範囲の書式を削除
sheet1.Range("B1:D3").ClearFormats();
//Sheet1のセルC3のコメント文を削除
sheet1.Range("C3").ClearComments();
//Sheet1のセルA1~B2に含まれるコメント文を削除
sheet1.Range("A1:B2").ClearNotes();
//Sheet1のセルA1~B2に含まれるハイパーリンクを削除
sheet1.Range("A1:B2").ClearHyperlinks();

Cellsプロパティに引数を何も指定しない場合、シートのセル全範囲を示すRangeオブジェクトが返されます。

下記例では、引数なしのCellsプロパティを用いることでシート内の全ての情報を削除しています。

//アクティブなシートのセル全範囲をクリア
var activeSheet = Excel.ActiveWorkbook.ActiveSheet;
activeSheet.Cells().Clear();

ClearOutlineメソッドの怪

ClearOutlineメソッドは、グループ化を解除します。指定したセル範囲にかかるグループ化がある場合は、そのグループ化が解除されます。

var activeSheet = Excel.ActiveWorkbook.ActiveSheet;
activeSheet.Range("C1:E1").ClearOutline();

f:id:d_ymkw:20160714114830p:plain

なお、手元の環境では、グループ化されていない行・列のセルが指定されている場合には、シート内のグループ化が全て解除されました。しかしながら、この挙動は公式に明示されたものではありません。

ClearOutlineメソッドの詳細な挙動はMSDNにも記載されておらず、よくわからないところがあります。

アクティブシート内のアウトラインを全て解除する場合には、下記のように引数なしのCellsプロパティを利用すると確実です。

var activeSheet = Excel.ActiveWorkbook.ActiveSheet;
activeSheet.Cells().ClearOutline();