📘 Excel逆引き事典

【VBA】可視セル(フィルタ結果)をバックグラウンドで取得する方法

手作業でフィルタ結果をコピーするのは時間がかかるだけでなく、ミスの可能性も高まります。この記事では、VBAを使用してフィルタ結果だけをバックグラウンドで高速に取得する方法を紹介します。

サンプルコード

VBA
Option Explicit
Sub GetVisibleCells()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim visibleRange As Range
    
    Application.ScreenUpdating = False '画面更新停止
    Set ws = ThisWorkbook.Sheets("Sheet1") '対象のシートを指定
    With ws.UsedRange
        If .Rows.Count > 1 Then
            lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
            For i = 2 To lastRow '最初の行はヘッダーとして扱うため、2行目からループ開始
                If ws.Rows(i).Hidden = False Then '非表示でない行を取得
                    If visibleRange Is Nothing Then
                        Set visibleRange = ws.Rows(i)
                    Else
                        Set visibleRange = Union(visibleRange, ws.Rows(i))
                    End If
                End If
            Next i
        End If
    End With
    
    '取得した範囲を表示するなど、必要に応じて処理を行う
    MsgBox "可視セルの数: " & visibleRange.Count
    Application.ScreenUpdating = True '画面更新再開
End Sub

よくある質問

Q 元に戻せますか?

A.
VBAの実行結果は「元に戻す」が効きません。必ずバックアップを取ってから実行してください。

Q エラーが出たら?

A.
シート名や列番号が正しいか確認してください。