本記事は、Excel C# Script入門講座の1記事です。
セルの削除(範囲・行・列)
セルの削除にはDeleteメソッドを使用します。引数により削除後のセルのシフト方向を指定することができます。
Deleteメソッドの構文
(Rangeオブジェクト).Delete(引数)
Deleteメソッドの引数
引数は省略可能で、指定する場合は下記の定数を指定します。ExcelCSXにおいては、定数はそのままでは呼び出せないため、かわりに対応する数値(各列挙体に割り当てられた数値)を指定して下さい。
引数に指定する定数 | enum値 | 内容 |
---|---|---|
xlShiftToLeft | -4159 | 左方向にシフト |
xlShiftUp | -4162 | 上方向にシフト |
引数を指定しない場合、セル範囲の形状によって変わり
- 行数 = 列数の場合は削除後、上方向にシフトし、
- 行数 < 列数の場合は削除後、左方向にシフトし、
- 行数 > 列数の場合は削除後、上方向にシフトします。
セルの行または列を選択範囲とする場合、
- 行の場合は削除後、上方向にシフトし、
- 列の場合は削除後、左方向にシフトします。
サンプルコード
//アクティブなシートのセルB1~D3の範囲の削除 //(行数=列数なので上方向にシフト) Excel.Range("B1:D3").Delete();
//アクティブなシートのセルB1~D4の範囲の削除 //(行数>列数なので左方向にシフト) var activeSheet = Excel.ActiveWorkbook.ActiveSheet; activeSheet.Range("B1:D4").Delete();
//Sheet1のセルB1~D3の範囲の削除 //(引数により上方向にシフト) Excel.Worksheets("Sheet1").Activate(); Excel.Worksheets("Sheet1").Range("B1:D4").Delete(-4162);
//行単位で削除する場合 var activeSheet = Excel.ActiveWorkbook.ActiveSheet; activeSheet.Range("B1:D4").EntireRow.Delete(); //列単位で削除する場合 activeSheet.Range("B1:D4").EntireColumn.Delete();
ExcelCSXでの注意点
現状のExcelCSXでは、Excel.Rangeプロパティ、Excel.Worksheetsプロパティ経由でRangeプロパティを呼び出した場合、Delete操作に異様に時間がかかる。高速に処理したい場合には上記2つ目のコードのように、アクティブシートオブジェクトを介してRangeプロパティを呼び出すことをオススメする。