処理を実行させる前にシートに残っている過去のデータを削除することが良くあります。
ネットにはほんとにいろいろなコードが存在してますよね。
毎度探すのも超面倒だし、いつも使っている最終行まで削除するコード掲載しておきます。個人的にはほんと、これが一番です。
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をデータベース・テーブルのように使うことが多いので、列削除よりも行削除を行う方がはるかに多いですね。
今回紹介したコードを覚えていただければ、さまざまなところで利用することができますので、ぜひ覚えておいてください。
ではまた!