サラリーマンの方々は、エクセルで資料を作成する機会がなにかと多いと思います。特に文書を補完する表を入れ込んだ資料はなおさら。今回は、エクセルで使用頻度の高い表(テーブル)において、
『項目を除いたデータ部分のみをクリアする方法』
について書きたいと思います。
因みにですが、ここで紹介するVBAのコードは、
プロ顔負けといったすごいものではなく、こうすれば「一応できる」という初心者レベルでの解説となります。
あくまで個人レベルで作業することを想定していますのでご了承ください。
手順1 表全体を参照する
まずは、表全体を捉えます。
使用するプロパティは、CurrentRegion。
このプロパティは、空白の行・列で囲まれた範囲を取得します。
空白の行と列に囲まれた部分なので、
Range(”B2”).CurrentRegion.select
とすると、色のついたセル部分の範囲(B2:E7)を取得できます。
周りのセルに、文字等が入っていませんからね。
ただ、表を作成する時にタイトルを付けたり、コメントをすぐ下に書いたりする場合もあると思います。
例えばこんな感じ。
この場合、取得する参照範囲はこうなります(色のついた範囲です)。
本来不要な、21行、28行目も取得していしまいます。
こういう時は、上表で言うところの「21・22行目」、「27・28行目」の間に行を挿入し、それぞれ挿入した行を非表示にするという方法もあります。
赤矢印部分を「非表示」にしてやれば、表部分のみの範囲を取得できます。
列の場合も考え方は同じなので、必要に応じて非表示対応する手が使えます。
手順2 データ部分のみを参照しなおす
さて、表全体をとらえる事は出来ました。
次にやりたいのは、データ部分のみを選択し、同部分のデータをクリアする事。
表には、通常「項目」があるので、その部分を参照範囲から除外することが必要になってきます。
ここで使用するプロパティは、Resizeプロパティ。
これ、かなり使えます。
最初にCurrentRegionで取得した範囲を参照ベースとして、新たに参照範囲を取得しなおせるわけですので。
因みに引数は2つです。
【引数】
● RowSize → 変更後の行数を指定する
● ColumnSize → 変更後の列数を指定する
しかし、これだけでは使えません。
ここで、ポイントになってくるのは、Offsetプロパティ。
これを組み合わせて使います。
このプロパティは、基準となるセルを行数・列数を指定して参照範囲をずらすことが出来る大変便利なプロパティです。
下表で説明します。
まずは、基準となるセルをB3にして、CurrentRegionで表全体(B3:E8)を参照。
次にOffsetプロパティで行・列を1つずつずらすイメージです。
<サンプルコード>
Sub 表のデータ部クリア()
Range(“B3”).CurrentRegion.Offset(1, 1).Select
End Sub
しかし、これだと9行目とF列が不要になります。
そこで、下記のプロパティを使います。
● Rows.Count
● Columns.Count
これらは、表の行数や列数を数える為のプロパティです。
サンプルコードはこんな感じ。
<サンプルコード>
Sub 表のデータ部クリア()
Dim RowCnt As Long, Colcnt As Long
With Range(“B3”).CurrentRegion
RowCnt = .Rows.Count
Colcnt = .Columns.Count
.Offset(1, 1).Resize(RowCnt – 1, Colcnt – 1).ClearContents
End With
End Sub
オフセットプロパティで1行下、1列右へずらした後に、Rows.Count及びColumns.Countで取得した行数(6行)、列数(4列)からそれぞれ1ずつ引いて範囲を狭める(C4:E8)形です。
こうすれば、項目行・列を外した純粋なデータ部分のみを参照することが出来ます。
あとは、ClearContentsメソッドでデータをクリアすればOKです。
補 足
ClearContentsにおいて
セルの内容を削除するには、ClearContentsメソッドを使います。
単に、Clearメソッドを使うと、セルに設定されているすべてのデータが消去されてしまいます。
つまり、罫線も消えてしまうわけですね。