Excel

【Excel・VBA】名前の定義と見出しを除くデータ領域のデータを消す方法

2020-09-07

見出しを除くデータを消す方法です。

ここで名前の定義方法を説明する理由は、この後もこのデータを利用した続きがあるためです。

データ範囲に名前の定義を設定する

次のデータ領域に名前の定義を設定します。

  • セルA1:B10に入力されている
  • セルA1:B10に隣接するセルは空白

「品名一覧」と名前をつけるコードです。

Sub sample_name()
  Range("A1").CurrentRegion.Name = "品名一覧"
End Sub

「Range("A1").CurrentRegion」はセルA1を起点とし、空白行と空白列に囲まれた範囲を取得します。これにRangeオブジェクトのNameプロパティで名前の定義をします。

実行後

名前ボックスをクリックすると「品名一覧」があります。

「品名一覧」を選択すると設定した範囲が選択されます。

見出しを除くデータの削除

見出しを除く範囲「セルA2:B11」を選択

データを消した結果

最終行取得の場合

データ領域の選択コードです。

Sub sample_hani1()
    Dim LRow As Long
    LRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range(Cells(2, 1), Cells(LRow, 2)).Select
End Sub

「Cells(Rows.Count, 1).End(xlUp).Row」でセルA1の最終行から上方向の最後の行を取得すれば範囲を指定できます。

データを消すコードです。

Sub sample_hanidel1()
    Dim LRow As Long
    LRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range(Cells(2, 1), Cells(LRow, 2)).ClearContents
End Sub

「Range(Cells(2, 1), Cells(LRow, 2)).Select」の最後の「Select」を「ClearContents」に変えるだけです。「ClearContents」は値のみを消します。「Del」キーでデータを消す場合と同じ動作です。書式も消す場合は「Clear」を使います。

Offsetの場合

「Range("A1").CurrentRegion」でデータ領域を取得し、1行下にずらした範囲を取得しデータを消す方法です。

Sub sample_hanidel2()
    Range("A1").CurrentRegion.Offset(1, 0).ClearContents
End Sub

Range("品名一覧")

「Range("A1").CurrentRegion」を名前の定義で「品名一覧」と設定しているため、「Range("品名一覧").Offset(1, 0).ClearContents」で動作します。

Sub sample_hanidel2_2()
    Range("品名一覧").Offset(1, 0).ClearContents
End Sub

Offset(1, 0)

「Offset(1, 0)」の0は省略できるので「Offset(1)」でも動作します。

「Range("A1").CurrentRegion.Offset(1, 0).select」での範囲は、消したい1行下まで選択されますが影響はないため上記のコードで問題ありません。

Intersectの場合

Intersectメソッドを使った方法です。

Sub sample_hanidel3()
      Intersect(Range("品名一覧"), Range("品名一覧").Offset(1)).ClearContents
End Sub

Intersectでセル範囲が重なる領域を取得、データを消します。

「Range("品名一覧")」は「offset」と同じく、名前の定義で「品名一覧」と設定しているため、「Intersect(Range("品名一覧"), Range("品名一覧").Offset(1)).ClearContents」で動作します。

「Range("品名一覧")」の範囲

Range("品名一覧").CurrentRegion.Offset(1)」の範囲

上記2つが重なった範囲が黄色のセル塗りつぶし

-Excel
-

© 2021 オフィスのQ&A