はじめに
セルの削除は、Rangeオブジェクトの Delete メソッドを使います。
Delete メソッドを使う際、単体のセルでは削除方法を引数 Shift で左方向、または上方向を指定します。
行、列の削除ではRangeの指定方法で判断されますのでShiftで指定する必要はありません。
尚、VBAで行った操作に関してはUndo(元に戻す)が使えませんので、プログラミングの際はバックアップを取ったり、テストを行うなどの準備が必要になります。
セルの削除
RangeオブジェクトのDeleteは、Excelでの「削除」コマンドと同等です。
(ただしVBAではUndoは効きません。)
引数 Shift は省略する事もできますが、思い通りの結果が得られない事もあるので指定するようにします。
Sub CellDeleteTest1()
Range("F2").Delete Shift:=xlToLeft '左方向へシフト
Range("F2").Delete Shift:=xlUp '上方向へシフト
End Sub
Deleteメソッドは、引数 Shift を省略する事もできますが、システムが勝手に解釈してしまうため通常は Shift 引数を指定します。
行・列全体を削除
行単位、列単位で削除を行いたい場合は、Rangeオブジェクトで指定して Delete メソッドを使います。
この場合は、削除方向が決まりますので Shift引数の指定は不要です。
行全体の削除
行全体を削除する方法を3種類示します。
Sub CellDeleteTest2()
Rows(10).Delete
Range("9:9").Delete
Range("A8").EntireRow.Delete
End Sub
上の例では、10行目、9行目、8行目をそれぞれ削除しています。
複数の行を削除する際には、下から順番に削除しないと思い通りの結果が得られないので注意しましょう。
また以下のように With を使ってDeleteした後、対象の行に何かしようとするとエラーとなります。
Sub CellDeleteTest2a()
With Range("A8").EntireRow
.Delete
.Interior.Color = 65535 'Error オブジェクトが必要です。
End With
End Sub
これは対象となる行が With によって保持されているためです。
列全体の削除
列全体の削除は、行の削除と同じ要領で行えます。
複数の列を削除する際には、右側から削除しないと思い通りの結果が得られないので注意しましょう。
With を使った場合の注意点も同じです。
Sub CellDeleteTest3()
Columns(10).Delete '10列目を削除
Range("I:I").Delete '9列目を削除
Range("H1").EntireColumn.Delete '8列目を削除
End Sub
まとめ
Deleteメソッドでは以下の点に注意しましょう。
・Undoが効かないので十分にテストしてから使いましょう。
・単体のセルでは、Shift引数を指定する。
・複数の行、列の削除では、削除する順番に気を付けましょう。
・With を使用する場合、Deleteメソッドの後に何かするとエラーとなる場合があります。
Shift引数がわからなくなった時は、マクロの記録で再現すると表示できます。
コメント