当ページのリンクには一部広告が含まれています。
雑記

Excel VBA 複数「列」を高速削除「Range・Union」使用で高速化する

© UsaNekoSanpo

複数「列」を削除高速化

うさこちゃん
うさこちゃん

条件に合う列を高速に削除したい場合にデータ量が大量にあると非常に削除が(かなり)遅い場合があります。
その場合は「Range」に削除データを貯めておいて一括して削除すると高速化できます。

①元データ

うさこちゃん
うさこちゃん

2行目に0のデータがある列を削除する。

ヘッダ1234567891011
条件21015005010
データデータデータデータデータデータデータデータデータデータデータデータ

②処理後データ

うさこちゃん
うさこちゃん

2行目の0のデータを列削除した結果。

ヘッダ1245810
条件211551
データデータデータデータデータデータデータ

処理速度の違い

うさこちゃん
うさこちゃん

今回は以下のデータ件数で約10倍の速度差になりました。
列データ500件
行データ100件
削除対象100件

サンプル①0.5273
サンプル②0.0625

サンプル①

Dim ObjThisSh  As Object
Dim LngColMax As Long
Set ObjThisSh = ThisWorkbook.Sheets("Sheet1")

With ObjThisSh

    LngColMax = .Cells(2, .Columns.Count).End(xlToLeft).Column

    For LngIndex = 2 To LngColMax
        If .Cells(2, LngIndex).Value = 0 Then
            '列を削除
            .Columns(LngIndex).Delete
        End If
    Next LngIndex

End With

サンプル② 高速化

Dim ObjThisSh  As Object
Dim LngColMax As Long
Dim LngIndex As Long
Dim RngDelete As Range
Set ObjThisSh = ThisWorkbook.Sheets("Sheet1")

With ObjThisSh

    LngColMax = .Cells(2, .Columns.Count).End(xlToLeft).Column

    For LngIndex = 2 To LngColMax
        If .Cells(2, LngIndex).Value = 0 Then
            If RngDelete Is Nothing Then
                Set RngDelete = .Cells(2, LngIndex)
            Else
                Set RngDelete = Union(RngDelete, .Cells(2, LngIndex))
            End If
        End If
    Next LngIndex

    If Not RngDelete Is Nothing Then
        'RngDelete.EntireColumn.Select 'テスト用 削除予定列を表示させる
        '列を一括削除
        RngDelete.EntireColumn.Delete
    End If

End With
ExcelVBA逆引き大全 600の極意 Office365/2019/2016/2013/2010対応

ExcelVBAを仕事で使う際、「あれって、どうやるんだったっけ?」と困った時にサッと使うための逆引きテクニック集です。「コピペ使用に耐えうるサンプル」「スクショ画像を交えての丁寧な説明」「構文についてだけの情報もセットになっている」「関連するテクニックについての情報もすぐに引ける」という4つの条件を満たした情報をネットで探すのは非常に困難。デスクの片隅に常備したい1冊です。

できる大事典 Excel VBA 2019/2016/2013&Microsoft 365(サンプルファイル・無料電子版付)

VBAを使ってコードを記述するには、プログラミングの知識や基本構文の理解などが必要です。しかし、基本的な概念や仕組みだけを覚えても、VBAを使って柔軟にプログラムを記述するのはなかなか難しいもの。自分の思い通りにプログラムを記述するには、使用したい機能の構文や、構文を記述する際の設定項目なども知ることが必要です。
992ページという大ボリュームに、Excel VBAを使ったあらゆる操作を凝縮しました。この1冊をお持ちいただければどんな場面でもすぐに役立つはず。クラスモジュールを利用したプログラムの作成方法や、Webスクレイピングを実行するVBAの記述方法など、高度な内容も解説しているため、一歩先を進んだ応用的な操作をしてみたい中級者の方にもおすすめの1冊です。