ExcelマクロVBA再入門
第8回.表範囲をまとめて消去する(OffsetとClearContents)

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
最終更新日:2016-03-29

第8回.表範囲をまとめて消去する(OffsetとClearContents)


エクセルのマクロ処理では、表範囲を一旦クリアしてから処理することが多くあります、


つまり、表範囲を初期化してから、何らかの処理をするという事です。

しかし、表範囲をクリアすると言っても、表そのものを消してしまう訳にはいかない事が多く、

データ部分、つまり見出しや計算式の入ってないセルのみを消去しなければなりません。

以下の表でやってみましょう。

エクセル マクロVBA サンプルデータ

この表の、2行目から下の部分をクリアします。
つまり、
見出しだけを残して初期化します。

それには、まず、表範囲を確実に把握することが必要です。
表の最終行を取得して、2行目から最終行までを範囲とすることができそうです。

そして、セル範囲の消去は、

セル範囲.ClearContents
または、

セル範囲.Clear

になります。

Clearは書式も消して、何も設定されていない初期のセルにします。
対して、
ClearContentsは、値のみの消去になります、セル範囲を選択して、Deleteキーを押す操作になります。
今回は、ClearContentsでコードを説明します。

エクセル マクロ VBAコード

上記の表ならこれで問題はありません。
iには、最終行が取得されて11が入りますので、
結果として、
Range(Range("A2"), Cells(11, 3)).ClearContents
という事なので、正しく消去できます。

しかし、上記のコードを2回実行すると、どうなるでしょうか。
1回目で、データ部分が消去され、
マクロ VBA サンプル画像
このようになりますので、
2回目には、最終行が1となり、
Range(Range("A2"), Cells(1, 3)).ClearContents
となってしまいます。
これは、実行してみれば分かりますが、1行目の見出しまで消えてしまいます
これを避けるためには、最終行が2以上の時だけ消去する等のロジックを入れる必要があります。

しかし、VBAでは、もっと簡単に表範囲のデータ部分だけ消去する方法があります。

エクセル マクロ VBAコード

たったこれだけで、表範囲のデータ部分のみ消去出来るのです。
では、理屈です、コードの解説をします。


Range("A1").CurrentRegion

ここまでで、表全体の範囲(A1:C11)になります。
これは、A1セルを選択し、Ctrl+Aを押した範囲です。
カレントリージョンと読みます、
そして、

Offset(1, 0)

これは、その前に書かれている範囲をずらす命令です。

Offset(ずらす行数, ずらす列数)
したがって、
Range("A1").CurrentRegion.Offset(1, 0)
これは、表全体の範囲(A1:C11)を下に1つずらした範囲(A2:C12)になります。

これなら正しく消去できます。
2回目を実行したときも、
表全体の範囲(A1:C1)を下に1つずらした範囲(A2:C2)となるので問題ありません。

ちなみに、消去する範囲が1行余分なのですが、
CurrentRegionの範囲は、周り(上下左右)のセルには何も入っていない独立したセル範囲なので問題ないのです。

では、上記の表で、店舗名を消したくない時はどうしたらよいでしょうか。
ちょっと考えてみて下さい。
Offset(ずらす行数, ずらす列数)
なので、右にも1つずらせば良いのです。

エクセル マクロ VBAコード

これで、1行目とA列を残したデータ部分を消去できます。


※データ範囲に関係なく消去する場合
Cells.ClearContents '全セルを消去
Columns(1).ClearContents 'A列を消去
Range("A:B").ClearContents 'A:B列を消去
Rows(1).ClearContents '1行目を消去
Range("1:2").ClearContents '1:2行目を消去




同じテーマ「マクロVBA再入門」の記事

第5回.同じ計算を行数分繰り返す(For~Next)
第6回.表の先頭から最終行まで繰り返す(ForとEnd(xlUp).Row)
第7回.セルの値によって計算を変える(Ifステートメント)
第8回.表範囲をまとめて消去する(OffsetとClearContents)
第9回.関数という便利な道具(VBA関数)
第10回.ワークシートの関数を使う(WorksheetFunction)
第11回.分からない事はエクセルに聞く(マクロの記録)
第12回.エクセルの言葉を理解する(オブジェクト、プロパティ、メソッド)
第13回.セルのコピペ方法を知る(CopyとPaste、さらに)
第14回.セルの書式を設定する(NumberFormatLocal,Font,Barders,Interior)
第15回.手作業で出来なければマクロは書けない


新着記事NEW ・・・新着記事一覧を見る

VBAコードの全プロシージャー・プロパィ一覧を取得|VBAサンプル集(10月12日)
VBAでエラー行番号を取得できるErl関数|VBA技術解説(10月12日)
手動計算時の注意点と再計算方法|ExcelマクロVBA技術解説(10月9日)
引数の数を可変にできるパラメーター配列(ParamArray)|VBA入門(10月7日)
VBEの使い方:デバッグ|ExcelマクロVBA入門(10月6日)
VBAにおける配列やコレクションの起点について|VBA技術解説(10月5日)
VBEの使い方:オブジェクト ブラウザー|VBA入門(10月5日)
VBEの使い方:ウォッチ ウィンドウ|VBA入門(10月4日)
VBEの使い方:ローカル ウィンドウ|VBA入門(10月3日)
VBEの使い方:イミディエイト ウィンドウ|VBA入門(10月2日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • 表範囲をまとめて消去する(OffsetとClearContents)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ