黙々とC#

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


セルの削除(範囲・行・列)

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

セルの削除(範囲・行・列)

セルの削除にはDeleteメソッドを使用します。引数により削除後のセルのシフト方向を指定することができます。

Deleteメソッドの構文

(Rangeオブジェクト).Delete(引数)

Deleteメソッドの引数

引数は省略可能で、指定する場合は下記の定数を指定します。ExcelCSXにおいては、定数はそのままでは呼び出せないため、かわりに対応する数値(各列挙体に割り当てられた数値)を指定して下さい。

引数に指定する定数 enum値 内容
xlShiftToLeft -4159 左方向にシフト
xlShiftUp -4162 上方向にシフト

引数を指定しない場合、セル範囲の形状によって変わり

  • 行数 = 列数の場合は削除後、上方向にシフトし、
  • 行数 < 列数の場合は削除後、左方向にシフトし、
  • 行数 > 列数の場合は削除後、上方向にシフトします。

セルの行または列を選択範囲とする場合、

  • 行の場合は削除後、上方向にシフトし、
  • 列の場合は削除後、左方向にシフトします。

サンプルコード

//アクティブなシートのセルB1~D3の範囲の削除
//(行数=列数なので上方向にシフト)
Excel.Range("B1:D3").Delete();

f:id:d_ymkw:20160713201758p:plain

//アクティブなシートのセルB1~D4の範囲の削除
//(行数>列数なので左方向にシフト)
var activeSheet = Excel.ActiveWorkbook.ActiveSheet;
activeSheet.Range("B1:D4").Delete();

f:id:d_ymkw:20160713202101p:plain

//Sheet1のセルB1~D3の範囲の削除
//(引数により上方向にシフト)
Excel.Worksheets("Sheet1").Activate();
Excel.Worksheets("Sheet1").Range("B1:D4").Delete(-4162);

f:id:d_ymkw:20160713202641p:plain

//行単位で削除する場合
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プロパティを呼び出すことをオススメする。