2/13/2018

Excel。マクロ022。データ削除のパターンを確認してみよう【Delete】

Excel。マクロ022。データ削除のパターンを確認してみよう

<Excel VBA>

次の表があります。

1行目に、見出し行があって、A列には、見出し列。
そして、四半期ごとに小計が算出されていて、
最終行に総合計の行があるという表です。

この表を毎年使いまわすので、データを削除するのですが、結構面倒。

今回はサンプルなので、B:Dの3列ですが、支店数が多かったりしたら、
いちいち範囲選択をして削除。

しかも、小計行の数式は削除したくないわけですね。

そこで、Excel VBAを使って効率的に作業できないかなぁ~と考えたわけです。

さて、実際にどのように構文を作ればいいのでしょうか?

仮に次のような構文だとどうなるでしょうか?
Sub データクリア01()
    Range("a1").CurrentRegion.ClearContents
End Sub
では、実行してみましょう。

ありゃま、見出し行も見出し列も数式も関係なく消えちゃいましたね。

Range("a1").CurrentRegion.ClearContents
は、Range("a1").CurrentRegion =A1から接続しているデータ(表)を、
ClearContents=消去という構文ですから、
当然全部消えちゃったわけですね。

なので、ちゃんと、
見出し行と見出し列を残すように指示してあげないといけないわけです。

では、次のように構文を変えてみました。

Sub データクリア02()
    Range("b2", Range("b2").End(xlDown).End(xlToRight)).ClearContents
End Sub

では、どうなるでしょうか?

ちなみに、次のような構文でも同じになりますよ。

Sub データクリア03()
    Range("b2", Range("b2").End(xlDown).End(xlToRight)) = ""
End Sub

一応説明しておきますと、
Range("b2").End(xlDown).End(xlToRight)は、
B2を起点に、End(xlDown)=下方向の最後のデータのセルの
End(xlToRight)=一番右側のセル番地という意味ですね。

しかしながら確かに、見出し行と見出し列は残すことができましたが、
小計や総計の計算式は消えてしまいました。

ということは、細かく数値データのところを選択して
削除するようにしないといけないのでしょうか?

しかし、細かく範囲選択を指示するのは、
面倒ですし、もし表自体の大きさが変わってしまうケースもあったりしたら、
その都度修正する必要も発生しますので、効率が悪くなります。

では、次のように修正してみましょう。

Sub データクリア04()
    Range("b2", Range("b2").End(xlDown).End(xlToRight)).SpecialCells(xlCellTypeConstants, xlNumbers).ClearContents
End Sub

それでは、実行してみましょう。

今回は、見出し行も見出し列も、
そして、数式のセルを残して数値のデータのみを削除することができていますね。

では、説明しておきましょう。
新しく加わったのは次の構文ですね。

SpecialCells(xlCellTypeConstants, xlNumbers)

SpecialCellsメソッドを使用すると、
指定した条件に該当するセルを取得することができます。では、今回の条件は、

xlCellTypeConstants
このxlCellTypeConstantsは、定数が含まれているセルという意味です。

さらに、xlNumbersというValueの設定値は、”数値”を意味します。
つまり、『数値の入っているセル』という意味になります。


Excel VBAにまだ慣れていないと、
範囲選択の操作イメージがあると思いますが、
SpecialCellsメソッドは、何かと使い勝手がいいので、
覚えておくといいメソッドですね。

ちなみに、シートにほかの表とかなければ
次のような構文でも同じように処理してくれます。

Sub データクリア05()
    Cells.SpecialCells(xlCellTypeConstants, xlNumbers).ClearContents
End Sub