このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】行を削除する方法(下から削除するのがコツ)

今回はVBAで行を削除する方法を紹介します。

Excelには色々な機能が存在しますが、一括で行を削除する方法はありません。
(行を非表示にする方法はあります)

そのため、一気に行を削除したい場合はVBA(マクロ)の使用がおすすめです。

ただし、行の削除では1つ気を付ける必要があるので併せて覚えてみてください。

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

行を削除する方法

例えば、このようなデータがあったとします。
そして、B列に「削除」と書かれている行を削除したいとします。

Sub Delete_Rows()
    ''' B列が「削除」の行を削除
    
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim row_i As Long

    ' アクティブシートを対象に設定
    Set ws = ActiveSheet
    
    ' 最終行を取得
    lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row

    ' 一番下の行からループして削除を実行
    For row_i = lastRow To 1 Step -1
        If ws.Cells(row_i, 2).Value = "削除" Then
            ws.Rows(row_i).Delete
        End If
    Next

End Sub

そうした場合、このコードを実行するとB列に「削除」と書かれた行を一気に削除することができます。

        If ws.Cells(row_i, 2).Value = "削除" Then
            ws.Rows(row_i).Delete
        End If

シートの設定や最終行の取得などがありますが、実際に行を削除しているのはこの部分です。

ここで、B列が「削除」であれば、行の削除(Delete)を行っています。

下から削除するのがコツ

    ' 一番下の行からループして削除を実行
    For row_i = lastRow To 1 Step -1
        If ws.Cells(row_i, 2).Value = "削除" Then
            ws.Rows(row_i).Delete
        End If
    Next

行を削除するときに1つ気を付けて欲しいことがあります。
それは下の行から削除することです。

行の削除では、Forループを使っているのですが、Step -1とすることで行の数字を1つずつ小さくしています。

最終行(lastRow)から1行目まで順番にループさせています。

行を削除すると、削除した行の分だけ行数がずれていってしまいます。

そのため、上から順にループを回していくと行数がずれていって、本来削除するはずの行が残ることがあります。

このように「削除」が連続しているときに、上から削除していくと削除が残ってしまいます。

そのため、行を削除するときは一番下の行からループさせるようにしてください。

《VBA上級者になりたい人へ》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。
この本を読み切れば間違いなくVBA上級者になれます。

created by Rinker
技術評論社
¥3,430 (2024/12/18 07:19:39時点 Amazon調べ-詳細)
VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

VBA

Posted by やろまい