Excel

​VBAマクロで行削除で上に詰める(条件に合う、最終行まで、空白、不要な行、特定の値やなど、Range、Deleteメソッド使用)

当サイトでは記事内に広告を含みます
いつも記事を読んでいただきありがとうございます!!! これからもお役に立てる各情報を発信していきますので、今後ともよろしくお願いします(^^)/

この記事ではExcelのVBAマクロを利用して、特定の条件に合った行を削除し、上に詰める方法について解説していきます。

ポイントとしてはRange関数、Deleteメソッド、InputBox関数を使用することです。

なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名(あなた自身が名付けていい場所)を少々変わった名称にしております。

そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。

それでは詳しく見ていきましょう!

VBAマクロで行削除で上に詰める(空白行を最終行まで、a列のみの空白を確認【Range、Delete】

それではまず、空白行を最終行まで削除する方法について解説していきます。この方法では、A列のデータを確認し、空白の場合その行を削除します。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub KuuhakuGyouSakujo()
    Dim saishuuGyou As Long
    Dim hensuu As Long

    saishuuGyou = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

    For hensuu = saishuuGyou To 1 Step -1
        If ThisWorkbook.Worksheets("Sheet1").Cells(hensuu, 1).Value = "" Then
            ThisWorkbook.Worksheets("Sheet1").Rows(hensuu).Delete
        End If
    Next hensuu
End Sub

コードのAlt+F8を押し、マクロ選択画面でKuuhakuGyouSakujo関数を実行します。

このコードでは、最終行を特定した後、逆順にA列のデータを確認し、空白の場合その行を削除しています。逆順に確認することで、行を削除しても他のデータに影響を与えません。

VBAマクロで行削除で上に詰める(条件、特定の数値に一致(ダイヤログで数値入力【InputBox、Range、Delete】

続いては、特定の数値に一致する行を削除する方法について解説していきます。この方法では、ユーザーがダイヤログで入力した数値と一致する場合、その行を削除します。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub SuuchiGyouSakujo()
    Dim saishuuGyou As Long
    Dim hensuu As Long
    Dim suuchi As Variant

    suuchi = InputBox("削除する数値を入力してください")

    saishuuGyou = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

    For hensuu = saishuuGyou To 1 Step -1
        If ThisWorkbook.Worksheets("Sheet1").Cells(hensuu, 1).Value = suuchi Then
            ThisWorkbook.Worksheets("Sheet1").Rows(hensuu).Delete
        End If
    Next hensuu
End Sub

コードのAlt+F8を押し、マクロ選択画面でSuuchiGyouSakujo関数を実行します。

このコードでは、InputBox関数でユーザーから数値の入力を受け取り、その数値と一致する行を削除しています。ユーザーが任意の数値を指定できるため、柔軟に行削除が行えます。

VBAマクロで行削除で上に詰める(条件、特定の複数の数値にorで一致(ダイヤログで複数の数値入力、カンマ区切り【Split、InputBox、Range、Delete】

最後に、複数の数値に一致する行を削除する方法について解説していきます。この方法では、ユーザーがダイヤログでカンマ区切りで入力した複数の数値と一致する場合、その行を削除します。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub FukusuuGyouSakujo()
    Dim saishuuGyou As Long
    Dim hensuu As Long
    Dim fukusuuSuuchi As Variant
    Dim kugiri As Variant

    fukusuuSuuchi = InputBox("削除する数値をカンマ区切りで入力してください")
    kugiri = Split(fukusuuSuuchi, ",")

    saishuuGyou = ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

    For hensuu = saishuuGyou To 1 Step -1
        For Each suuchi In kugiri
            If ThisWorkbook.Worksheets("Sheet1").Cells(hensuu, 1).Value = Trim(suuchi) Then
                ThisWorkbook.Worksheets("Sheet1").Rows(hensuu).Delete
                Exit For
            End If
        Next suuchi
    Next hensuu
End Sub

コードのAlt+F8を押し、マクロ選択画面でFukusuuGyouSakujo関数を実行します。

このコードでは、InputBox関数でユーザーからカンマ区切りで複数の数値の入力を受け取り、Split関数を使ってそれらの数値を配列に格納しています。その後、それぞれの数値と一致する行を削除しています。複数の数値に対応するためのロジックが組み込まれており、より高度な行削除が可能になっています。

ExcelのVBAマクロを使って行を削除する方法は多岐にわたりますが、上記のコードを参考にしながら、必要に応じてカスタマイズしてご利用ください。特に日常業務でのデータ整理などに役立つことでしょう。今回は、特定の条件に合わせて行を削除する基本的な方法を中心に解説しましたが、VBAの知識を深めることで、さまざまな応用が可能になります。VBAの世界は奥が深く、学び続けることで日々の作業がより効率的になること間違いなしです。引き続き、ExcelやVBAの学習を楽しんでくださいね!