1

興味深い問題があります。このサイトと Google を検索してみましたが、関連する問題はわずかしかなく、実際にこの特定のニーズに対処するものはありません。

10 列のスプレッドシートがあります (それらを と呼びましょうA-J)。"30", "60", "90", "120"列 H のセル内の値または空白を持たないすべての行を削除する必要があります。

これを行うには多くの方法がありますが、それらはすべてループに依存しており、このデータセットには 25,000 行を超える行があり、実行に 10 分以上かかるため、私にはうまくいきません。

関数と組み合わせてオートフィルター オプションを検討してきました.Find(たとえば、条件を満たさない H セルを含むすべての行を検索して削除します) がAutoFilter、2003 では 2 つの条件でしか機能しませんが、チェックする必要があるのは 5 つです。どうすればよいかわかりません。

どんな助けでも大歓迎です。

4

5 に答える 5

2

これにより、20秒で25,000行のサンプルで一致するすべての行(〜10%)が削除されました

Sub tt()

Dim rw As Range
Dim all As Range
Dim t
Dim b As Boolean

t = Timer
For Each rw In Range("A1").CurrentRegion.Rows

    If rw.Cells(8).Value < 1 Then

        If b Then
            Set all = Application.Union(rw, all)
        Else
            Set all = rw
            b = True
        End If

    End If

Next rw

If not all is nothing then all.EntireRow.Delete

Debug.Print "elapsed: " & Timer - t

End Sub
于 2013-07-10T06:11:34.110 に答える
0

リストをフィルタリングするために2つ以上の基準を指定できる高度なフィルターオプションを試すことができます。設定した条件に一致するリストをフィルタリングした後、フィルタリングされたリストを別の場所にコピーし (オプションが利用可能)、残りを削除することができます。

于 2013-07-10T06:11:26.860 に答える
0

独自の条件で列を追加できます。

=IF(OR(H1=30;H1=60;H1=90;H1=120;H1="");"DELETE";"")

(数式は行1に指定されているため、範囲全体にコピーして貼り付ける必要があります)

次に、フィルター処理と並べ替えを使用して、削除する行を選択します。

于 2013-07-10T06:13:19.803 に答える
0

解決策を提案してくれたすべての人に感謝します。その間に、これを 1 秒未満で行う方法を考え出しました。どうやら私自身、それAutoFilterが比較基準 (より大きい、より小さいなど) をサポートできることに気づいていなかったようです。

一連のオートフィルターを使用して単純にフィルター処理し、「<30」、「30120」にフィルター処理されたすべての行を削除しました。

エレガントではありませんが、うまくいきました。

于 2013-07-11T23:01:46.677 に答える