0

私が取り組んでいるExcelマクロでは、フィルタリングされたデータを新しいシートにコピーして、非表示の行を削除します。これにより、ユーザーがフィルター処理したデータに対してより複雑な数式を実行できます。複雑にフィルター処理された大規模なデータ セットでは、コピー操作はフィルター処理されたデータだけではなく、すべてのデータをコピーしました。

手順を手動で複製すると、フィルター処理されたデータをコピーしようとすると、Excel で「データ範囲が複雑すぎます」というエラーが表示されました。これは、ソートしてからフィルタリングすることで簡単に回避できますが、VBA でこのエラーをキャッチする方法がわかりません。コピー操作が適切に機能しているかどうか (マクロを続行できるようにするか)、または選択が複雑すぎるかどうか (マクロを停止して、最初に並べ替えを試みるようにユーザーに警告する) を知る方法が必要です。

どうすればこれを行うことができますか?どんな助けでも大歓迎です。

以下の関連コード:

    Select Case Range("GDT_Filtered").Value
    Case "Filtered Data"
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        Set wRaw = ActiveSheet
        Sheets("Raw Data").Select
        lastRow = Range("A1").End(xlDown).Row
        Range("A1:S" & lastRow).Copy Destination:=wRaw.Range("A1")

    Case "All Data"
        Set wRaw = Sheets("Raw Data")
        On Error Resume Next
        wRaw.ShowAllData
        On Error GoTo 0
    End Select

ありがとう!

サム

4

2 に答える 2

1

さて、私は管理可能な回避策を考え出しました。

元のデータがシート wOne に保存され、フィルター処理されたデータがシート wTwo にコピーされると仮定すると、次のコードはフィルター処理と各シートの行数をチェックしてエラーを検出します。

' Excel can't copy too many discontinuous sections. If it happens it won't throw
' an error but will copy ALL data instead of just filtered data. This checks that
' such an error has not occurred.
If wOne.AutoFilter.FilterMode = True Then
    If wOne.range("A1").End(xlDown).Row = wTwo.Range("A1").End(xlDown).Row Then
        MsgBox "Filtering has produced too many discontinuous selections. " & _ 
                "Try removing the filters, sorting data by the variables " & _ 
                "you wish to filter with, reapplying the filters, and " & _
                "trying again. Good luck!"
        GoTo 1
    End If
End If
于 2013-04-07T14:42:29.773 に答える