オートフィルタで抽出した後、ユーザー定義関数を入力

Sub prcApplyUDFToVisibleCellsAfterFilteringBlanksInDColumn()
    ' 変数宣言
    Dim ws As Worksheet            ' 処理対象のワークシート
    Dim rngVisible As Range        ' フィルタ後の可視範囲
    Dim rngFirstVisibleCell As Range ' 可視セルの1行目
    Dim lngLastRow As Long         ' データの最終行

    ' 処理対象のワークシートを設定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' データの最終行を取得
    lngLastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row

    ' 既存のフィルタをクリア
    If ws.AutoFilterMode Then ws.AutoFilterMode = False
    
    ' D列が空白の条件でオートフィルタを適用
    ws.Range("A1:D" & lngLastRow).AutoFilter Field:=4, Criteria1:="="

    ' H列の可視セルを取得
    On Error Resume Next ' エラーを無視(フィルタ後に可視セルがない場合を考慮)
    Set rngVisible = ws.Columns("H:H").SpecialCells(xlCellTypeVisible)
    On Error GoTo 0 ' エラー無視を解除
    
    ' 可視範囲が存在しない場合、処理を中止
    If rngVisible Is Nothing Then
        MsgBox "可視セルが存在しません。", vbExclamation
        Exit Sub
    End If
    
    ' H列の可視セル1行目に数式を設定
    Set rngFirstVisibleCell = rngVisible.Cells(1, 1)
    rngFirstVisibleCell.Formula = "=fncBlnTest()"
    
    ' 数式を可視セルの最終行までコピー
    rngFirstVisibleCell.AutoFill Destination:=rngVisible, Type:=xlFillDefault
End Sub

コメント