【VBA】高速!配列を使った条件に一致する行を削除

こんにちは!大阪市を拠点に活動している『縁紡ぐ』の稲垣です。

SWELLを使ったホームページ制作や、Excel、ACCESS、RPAなどのシステム開発を行っています。
また、Excel、Word、Outlookの研修や、情報セキュリティ研修も行っています。身近なITの相談相手になりたいと思っています。

お気軽にお問い合わせください。

目次

動作の目的

業務で大量のデータを扱う際、不要な行を削除することは非常に重要です。このプロセスを自動化することで、作業時間を大幅に短縮できます。特に、特定の条件に一致する行を一括で削除したりすることはよくあると思います。こちらを配列を使って実行する方法をご紹介します。

コード

以下のコードで実行することができます。

Sub DeleteRowsAndCopyRemainingToArray()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim lastCol As Long
    Dim i As Long, j As Long
    Dim conditionValue As String
    Dim dataArray() As Variant
    Dim remainingData() As Variant
    Dim dataCount As Long

    ' 対象のシートを指定
    Set ws = ThisWorkbook.Sheets("Sheet1")

    ' 削除条件の値を設定
    conditionValue = "削除対象" ' 例: "削除対象"という値を持つ行を削除

    ' 最終行と最終列を取得
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' A列の最終行を取得
    lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column ' 1行目の最終列を取得

    ' シートのデータを配列に読み込む
    dataArray = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)).Value

    ' 配列の初期化(最大行数に合わせる)
    ReDim remainingData(1 To lastRow, 1 To lastCol) ' 残るデータを格納する配列

    ' 残るデータのカウント
    dataCount = 0

    ' 配列をループして条件を満たさない行を格納
    For i = 1 To lastRow
        If dataArray(i, 1) <> conditionValue Then ' 配列のA列の値が条件と一致しない場合
            dataCount = dataCount + 1
            For j = 1 To lastCol ' 列数分ループ
                remainingData(dataCount, j) = dataArray(i, j) ' 残るデータを配列に格納
            Next j
        End If
    Next i

    ' 配列のサイズを調整
    If dataCount > 0 Then
        ReDim Preserve remainingData(1 To dataCount, 1 To lastCol) ' 実際のデータ数に基づいて配列を再定義
    Else
        MsgBox "削除後のデータがありません。"
        Exit Sub
    End If

    ' 残ったデータを新しいシートに貼り付け(例: Sheet2に貼り付け)
    Dim targetWs As Worksheet
    Set targetWs = ThisWorkbook.Sheets("Sheet2")

    ' 配列のデータを貼り付け
    targetWs.Range("A1").Resize(UBound(remainingData, 1), UBound(remainingData, 2)).Value = remainingData

    MsgBox "データを貼り付けました。"
End Sub

配列を現在のデータ、そして削除後のデータとして2つ用意することで処理しています

条件値を変更すれば、他の値でも削除可能

32行目の

If dataArray(i, 1) <> conditionValue Then ' 配列のA列の値が条件と一致しない場合

ここが条件になっていますので、こちらを変更することで削除条件を変更することができます。

まとめ

このVBAコードを活用することで、面倒なデータ整理を自動化し、業務効率を大幅に向上させることができます。ぜひ試してみてください!

記事を書いた人

稲垣

  • Excel、ACCESSでのシステム開発が得意
  • ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
  • 自家焙煎するほどのコーヒー好き
  • 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
  • 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
  • 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
  • お客様にとって本当に良いことかを第一に考える人
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次