処理を実行させる前にシートに残っている過去のデータを削除することが良くあります。

ネットにはほんとにいろいろなコードが存在してますよね。

毎度探すのも超面倒だし、いつも使っている最終行まで削除するコード掲載しておきます。個人的にはほんと、これが一番です。

 

Excelシート内の最下行までの行を削除するコード

以下のコードをご利用ください。

Sub 行削除()
    Dim ws As Worksheet
    Dim endRow As Long
    Set ws = ThisWorkbook.Worksheets("ワークシート名")
    endRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    ws.Rows("2:" & endRow).Delete shift:=xlUp
End Sub

5行目でA列(1列目)の一番下の行番号を取得し、6行目で削除します。このコードでは、2行目~最下行を削除します。

“ワークシート名” 部分には削除したい行が存在するシート名を入力してください。

また、ws.Cells(Rows.Count, 1) の”1” は行数を取得しているため、ここは、最終行までデータが入っている列番号を指定するのがベターです。

だいたい1列目にデータが入っていることが多いので、サンプルコードは1列目を指定しています。

 

Deleteのオプションで Shift:=xlUp を指定していますが、これは、行を削除した後に上に詰めるというものです。

行削除なので、まず上に詰めることが多いと思います。仮に列を削除する場合には、Shift:=xlLeft を指定することもあります。

Excelファイル上の操作をイメージすると、分かりやすいですね。

 

フィルターがかかっている場合の行の削除方法

ツールを作っていると、過去のデータを削除してから処理を開始するということもよくあります。

上記のソースコードはそのまま使えるのですが、稀にフィルターがかかっているケースもあります。

一応、「フィルターがかかっているか判定して削除して…」というのが処理的にはきれいなのですが、ここで私がおすすめするのは以下のように、「delete」部分を二回実行するパターンです。

あんまりかっこよくないけど、速くツールを作りたいときには以下のコードを使っちゃいます。

Sub 行削除_フィルターかかっているケース()
    Dim ws As Worksheet
    Dim endRow As Long
    Set ws = ThisWorkbook.Worksheets("ワークシート名")
    endRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    ws.Rows("2:" & endRow).Delete shift:=xlUp
    ws.Rows("2:" & endRow).Delete shift:=xlUp
End Sub

 

こちらのコードは前段のコードとほぼ同じです。ws.Rows(“2:” & endRow) の”2″はヘッダー以下のデータが入力されている初めの行番号を指定します。

ここでは固定値で2を指定していますが、もちろん、ヘッダーの位置を取得して”2″の部分を可変項目にしておくというのもアリです!

私は面倒なので、固定値で指定してしまうことが多いです。

 

さいごに

行削除はツール作成の上で必須の処理です。

Excelをデータベース・テーブルのように使うことが多いので、列削除よりも行削除を行う方がはるかに多いですね。

今回紹介したコードを覚えていただければ、さまざまなところで利用することができますので、ぜひ覚えておいてください。

ではまた!