VBA再入門
表範囲をまとめて消去する(OffsetとClearContents)

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
公開日:2015-08-31 最終更新日:2020-09-26

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


エクセルのマクロVBAでの処理では、表範囲を一旦クリアしてから処理することが多くあります。
つまり、表範囲を初期化してから、その後に何らかの処理をするという事になります。


しかし、表範囲をクリアすると言っても、表そのものを消してしまう訳にはいかない場合が多く、
データ部分、つまり見出しや計算式の入ってないセルのみを消去しなければなりません。

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

エクセル マクロ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以上の時だけ消去する等のロジックを入れる必要があります。

Offsetを使って範囲をずらす

しかし、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行目を消去


ExcelマクロVBA入門等の対応ページ

第10回.Range以外の指定方法(Cells,Rows,Columns)
・Cells(行番号, 列番号) ・Rows(行番号) ・Columns(列番号) ・RangeとCellsの関連記事

第28回.セル・行・列の選択(Select,ActivateとCurrentRegion)
・選択セルとアクティブセル ・セルの選択 ・セルをアクティブにする ・行の選択、列の選択 ・セル領域の選択 ・メソッドとはプロパティとは

第39回.セルのクリア(Clear,ClearContents)
・セル(Rangeオブジェクト)のクリア関係のメソッド(動作を与える) ・Range.Clear ・Range.ClearContents ・クリア関係メソッドについて

第83回.RangeのOffsetプロパティ
・Offsetプロパティの構文 ・Offsetの使用例 ・Offsetの注意点 ・Offsetのまとめ



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

第5回.同じ計算を行数分繰り返す(For~Next)

・練習用のデータ作成について ・1行だけの計算をする場合は ・VBAの変数とは ・変数を使って行をずらしていく ・デバッグ:ステップ イン F8 ・変数を使った繰り返し処理 ・For~Nextの補足説明 ・VBAコードの書き方について ・ExcelマクロVBA入門の対応ページ
第6回.表の先頭から最終行まで繰り返す(ForとEnd(xlUp).Row)
・表の最終行を取得する ・表の最終行まで繰り返す ・VBAの文法を覚える必要があるか ・ExcelマクロVBA入門等の対応ページ
第7回.セルの値によって計算を変える(Ifステートメント)
・Ifの説明用のサンプル ・マクロVBAでのIfの使い方 ・Ifステートメントの書き方 ・Ifのネスト(入れ子) ・AndとOr ・ElseIfとSelect Caseについて ・マクロVBAは、プログラミングです ・Ifステートメントの練習問題 ・改行方法について ・ExcelマクロVBA入門等の対応ページ
第8回.表範囲をまとめて消去する(OffsetとClearContents)
第9回.関数という便利な道具(VBA関数)
・これだけは覚えておきたい必須VBA関数 ・VBA関数の練習 ・ExcelマクロVBA入門の対応ページ
第10回.ワークシートの関数を使う(WorksheetFunction)
・マクロVBAでのワークシート関数の使い方 ・長いスペルの単語を簡単に入れる方法 ・ワークシート関数を使ってみよう ・ワークシート関数を使う時の注意点、エラー対策 ・ExcelマクロVBA入門等の対応ページ
第11回.分からない事はエクセルに聞く(マクロの記録)
・マクロの記録の使い方 ・実際に分からない事を調べる時の手順 ・「分からない事はエクセルに聞く」のまとめ ・ExcelマクロVBA入門等の対応ページ
第12回.エクセルの言葉を理解する(オブジェクト、プロパティ、メソッド)
・VBAが表示するメッセージ ・オブジェクト、プロパティ、メソッド ・プロパティとメソッドの違い ・オブジェクトの階層(親子構造) ・プロパティの省略 ・エクセルの言葉であるVBAを日本語に翻訳する ・最終行取得のコードを訳してみる ・VBA用語を覚えることについて ・ExcelマクロVBA入門等の対応ページ
第13回.セルのコピペ方法を知る(CopyとPaste、さらに)
・セルをコピーして貼り付け ・セルをコピーして値貼り付け ・セルをコピーして書式貼り付け ・PasteSpecial(値貼り付け、書式貼り付け等)の細かい指定 ・もっと簡単なコピペ方法はないものか ・もっと効率的な「セルをコピーして貼り付け」 ・マクロならではの「値のコピー」 ・「セルのコピペ方法を知る」のまとめ ・ExcelマクロVBA入門等の対応ページ
第14回.セルの書式を設定する(NumberFormatLocal,Font,Borders,Interior)
・「セルの書式設定」ダイアログ画面 ・表示形式 ・フォント ・罫線 ・塗りつぶし ・「セルの書式を設定する」のまとめ ・ExcelマクロVBA入門の対応ページ
第15回.手作業で出来なければマクロは書けない
・エクセルの機能を知る ・ワークシート関数を知る ・「手作業で出来なければマクロは書けない」のまとめ ・ExcelマクロVBA入門の対応ページ


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

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門




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


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


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